如果我在代码上添加此功能,NSTimer会停止,为什么?

时间:2015-03-04 19:12:18

标签: ios loops swift

有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秒停止。

1 个答案:

答案 0 :(得分:2)

因为你的flow方法有一个永不退出并阻塞主线程的while循环,所以定时器永远不能触发。

不要使用while循环。我们使用计时器触发的方法更新UI。

所以:

func addSeconds () {
    seconds++

    myScreen.text = items[currentItem]

    if seconds == durations[currentDuration] {
        seconds == 0
        currentItem++
        currentDuration++
    }
}