用户界面:查看LifeCycle Lab

带有learn.co的Swift课“ Swift和iOS简介”

“骰子卷”应用

这是使用视图控制器进行编码的很好的练习。 目的是制作一个显示掷骰子结果的应用程序:

黑色正方形显示滚动结果(数字1表示1正方形,依此类推),底部标签显示以前的滚动。 红色=最近滚动。

我存储了我的IBOutlet变量,之后可以存储

 类ViewController:UIViewController { 

声明。

到模具按钮的IBAction连接是为我编写的,但我必须决定如何执行必要的操作。

 覆盖func viewDidLoad(){ 
  super.viewDidLoad() 
  hideViews() 
隐藏标签()
  } 
  @IBAction func dieButtonTapped(_ sender:AnyObject){ 
 让theRoll = randomDiceRoll() 
  updateLabelWithRoll(roll:theRoll) 
  RearrangeDie(roll:theRoll) 
  } 
  • hideViews()最初隐藏黑色正方形(模具上的点)。
  • “滚动”存储一个随机数1-6。
  • updateLabelWithRoll(roll:theRoll)滚动模具以更新每个标签的文本。 第一个滚动结果显示在最左侧的标签中,第二个结果显示在橙色标签中,依此类推。
  • RearrangeDie函数更新黑色视图方块以显示最新滚动的结果。

然后,我定义了以上功能。

我想知道是否没有更好的方法来编写updateLabelwithRoll函数。 我敢打赌,有一种方法可以将标签链接到字典,并使用for循环对其进行迭代。

 对于标签中的我: 
如果labels [i] == nil {
标签[i] = theRoll
}

这是一个有限的应用程序,因为六次滚动后,无法继续记录滚动结果。 我不知道如何编程以在最左边的红色标签中显示最新结果,并且每次滚动结果时,结果都会被推到右侧的一个标签上。

看看是否可以添加以下修改将非常有趣:

  • 重置按钮
  • 赋予视图动画
  • 将视图形状更改为圆形
  • 对标签进行动画处理,以使每个卷向右移动。
  • 添加压模声。
  //返回一个随机的Int(1、2、3、4、5或6) 
  func randomDiceRoll()-> Int { 
 返回Int(arc4random_uniform(6)+1) 
  } 
  //最初隐藏黑色视图方块 
  func hideViews(){ 
  viewOne.isHidden = true 
  viewTwo.isHidden = true 
  viewThree.isHidden = true 
  viewFour.isHidden = true 
  viewFive.isHidden = true 
  viewSix.isHidden = true 
  viewSeven.isHidden = true 
  } 
  //隐藏标签 
  func hideLabels(){ 
  labelOne.isHidden = true 
  labelTwo.isHidden = true 
  labelThree.isHidden = true 
  labelFour.isHidden = true 
  labelFive.isHidden = true 
  labelSix.isHidden = true 
  } 
  //显示最近滚动的结果。 黑色视图表示管芯上的点。 
  func RearrangeDie(roll:Int){ 
 切换辊{ 
 情况1: 
  viewOne.isHidden = true 
  viewTwo.isHidden = true 
  viewThree.isHidden = true 
  viewFour.isHidden = false 
  viewFive.isHidden = true 
  viewSix.isHidden = true 
  viewSeven.isHidden = true 
 情况2: 
  viewOne.isHidden = true 
  viewTwo.isHidden = true 
  viewThree.isHidden = false 
  viewFour.isHidden = true 
  viewFive.isHidden = false 
  viewSix.isHidden = true 
  viewSeven.isHidden = true 
 情况3: 
  viewOne.isHidden = true 
  viewTwo.isHidden = true 
  viewThree.isHidden = false 
  viewFour.isHidden = false 
  viewFive.isHidden = false 
  viewSix.isHidden = true 
  viewSeven.isHidden = true 
 情况4: 
  viewOne.isHidden = false 
  viewTwo.isHidden = true 
  viewThree.isHidden = false 
  viewFour.isHidden = true 
  viewFive.isHidden = false 
  viewSix.isHidden = true 
  viewSeven.isHidden = false 
 情况5: 
  viewOne.isHidden = false 
  viewTwo.isHidden = true 
  viewThree.isHidden = false 
  viewFour.isHidden = false 
  viewFive.isHidden = false 
  viewSix.isHidden = true 
  viewSeven.isHidden = false 
 情况6: 
  viewOne.isHidden = false 
  viewTwo.isHidden = false 
  viewThree.isHidden = false 
  viewFour.isHidden = true 
  viewFive.isHidden = false 
  viewSix.isHidden = false 
  viewSeven.isHidden = false 
 默认: 
 打破 
  } 
  } 
  //在标签中显示每个连续滚动的结果。 首先,红色标签显示第一卷的结果。 在下一卷之后,红色标签保持显示第一卷的结果,橙色标签显示第二卷的结果。 
  func updateLabelWithRoll(roll:Int){ 
 让diceScore =字符串(卷) 
 如果labelOne.isHidden { 
  labelOne.text = diceScore 
  labelOne.isHidden = false 
  } if labelTwo.isHidden { 
  labelTwo.text = diceScore 
  labelTwo.isHidden = false 
  } if labelThree.isHidden { 
  labelThree.text = diceScore 
  labelThree.isHidden = false 
  }否则,如果labelFour.isHidden { 
  labelFour.text = diceScore 
  labelFour.isHidden = false 
  }否则,如果labelFive.isHidden { 
  labelFive.text = diceScore 
  labelFive.isHidden = false 
  } if labelSix.isHidden { 
  labelSix.text = diceScore 
  labelSix.isHidden = false 
  } 
  } 
  }