有2 Array
个。第一个包含我要在String
上显示的UILabel
个。第二个包含他们在UILabel
上的等待时间。
let items = ["stone","spoon","brush","ball","car"]
let durations = [3,4,1,3,2]
两个variable
用于指定哪一个在路上。
var currentItem = 0
var currentDuration = 0
这是计时器系统:
var timer = NSTimer()
var seconds = 0
func addSeconds () {seconds++}
func setup () {
timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "addSeconds", userInfo: nil, repeats: true)
}
最后,这就是循环。答案:哪个Array
项目在UILabel
问题上停留了多少秒。
func flow () {
while seconds <= durations[currentDuration] {
myScreen.text = items[currentItem]
if seconds == durations[currentDuration]{
seconds == 0
currentItem++
currentDuration++
}
}
标签和按钮:
@IBOutlet weak var myScreen: UILabel!
@IBAction func startButton(sender: UIButton) {
setup()
}
}
如果我改变了这个:
func addSeconds () {seconds++}
对此:
func addSeconds () {seconds++ ; flow () }
为了设置循环,没有任何反应。即使是NSTimer,也会在第1秒停止。
答案 0 :(得分:2)
因为你的flow方法有一个永不退出并阻塞主线程的while循环,所以定时器永远不能触发。
不要使用while循环。我们使用计时器触发的方法更新UI。
所以:
func addSeconds () {
seconds++
myScreen.text = items[currentItem]
if seconds == durations[currentDuration] {
seconds == 0
currentItem++
currentDuration++
}
}