所以我每秒增加一个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()
,但这没有任何效果,计时器也不会重启
答案 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
是一个很好的方法来制作对象,使用核心动画。