用户界面:查看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
}
}
}