多个NSTimers Xcode 6 Swift

时间:2014-12-04 01:48:38

标签: ios xcode swift

所以我每秒增加一个CGPoint的y值。要做到这一点,我使用NSTimer来触发某个增加y值的函数。问题是每次用户触摸显示器时我都会增加y值。我注意到,每次有人敲击时,都会有多个计时器触发,因此增加的y值超出了预期。那么如何删除以前的NSTimers并仅使用最后一个?

我当前的NSTimer设置

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    var timer: NSTimer?
    timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
}

我的代码还有更多内容,但这是在“更新”时触发的基本NSTimer设置,它会使y值增加。

我尝试了timer.invalidate(),但这没有任何效果,计时器也不会重启

1 个答案:

答案 0 :(得分:1)

您的问题是每次用户录制,您创建了NSTimer实例,并且您没有删除最后一个`NSTimer实例,因此每个创建的实例都在runloop中运行。

解决方案1:

    var timer: NSTimer!
    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        if(timer == nil) {
            timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "update", userInfo: nil, repeats: true)
        }
    }

解决方案2:

    var timer: NSTimer!
    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        if(timer != nil) {
            timer.invalidate()
            timer = nil
        }
        timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "update", userInfo: nil, repeats: true)
    }

顺便说一句:我不认为使用NSTimer是一个很好的方法来制作对象,使用核心动画。