Swift:阻止NSTimer自动启动

时间:2015-11-07 16:06:35

标签: ios swift nstimer

我正在尝试使用NSTimer在录制语音时增加应用中的进度条(请参阅屏幕截图)App Screenshot

let timedClock = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("Counting:"), userInfo: nil, repeats: true)

    internal func Counting(timer: NSTimer!) {
            if timeCount == 0 {
                //self.timedClock = nil
                stopRecording(self) //performs segue to another view controller
            } else {
                timeCount--;
                self.timer.text = "\(timeCount)"
            }
            print("counting called!")
            progressBar.progress += 0.2
        }

在编译和运行项目后,进度条仅适用于第一次。录制完成后,应用程序会执行segue到另一个视图控制器播放录制的音频。但是,当我返回视图进行录制时,计时器/进度条会自动运行。我怀疑NSTimer对象在NSRunLoop上仍然存在。所以我想知道如何阻止NSTimer自动运行。

受到SO thread中答案的启发,我尝试了以下操作,但NSTimer仍会自动运行。

let timedClock = NSTimer(timeInterval: 1, target: self, selector: "Counting:", userInfo: nil, repeats: true)
        NSRunLoop.currentRunLoop().addTimer(timedClock, forMode: NSRunLoopCommonModes)

2 个答案:

答案 0 :(得分:2)

这是因为当您的控制器创建它时,它的属性会自动初始化。根据{{​​3}}(和方法的名称)scheduledTimerWithTimeInterval创建并返回预定计时器。因此,如果您只想创建计时器并通过触发器函数调用它,请使用如下:

class MyClass {

  var timer: NSTimer?
  ...
  func enableTimer() {
    timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("Counting:"), userInfo: nil, repeats: true)
  }

  func disableTimer() {
    timer?.invalidate()
    timer = nil
  }
  ...
}

答案 1 :(得分:1)

很抱歉快速自我回答,因为我发现我可以使用invalidate()方法来防止计时器自动触发:

timedClock.invalidate()

希望将来帮助某人!

相关问题