Swift NSTimer 动态改变间隔

标签 swift nstimer

<分区>

如何更改 NSTimer 的时间间隔?

var difficulty: Double = 1.0

override func viewDidLoad() {
    super.viewDidLoad()

    _ = NSTimer.scheduledTimerWithTimeInterval(difficulty, target: self, selector: #selector(hideAllBtns), userInfo: nil, repeats: true)

}

我运行一个 switch 语句,每次从 hideallbuttons 调用它,然后更新难度。

func getDifficulty (score : Double) -> Double {

    switch score {

    case 0...100: return(1.0)
    case 100...200: return (0.8)
    case 200...300: return (0.5)
    case 300...400: return (0.2)
    default: return (1.0)

    }
}

但是 NSTimer 在 1.0 秒时继续触发,我认为它会在第一次运行时创建一个副本并坚持该值,我试图在计时器调用中创建一个变量,但这不起作用。

有没有一种简单的方法可以动态调整计时器触发的速率?

这只是一个练习项目,因为我仍在学习,所以我知道可能有更好的方法来构建我想要做的事情。我认为动态调整计时器对将来的使用很有用。

最佳答案

你不能,一旦你触发计时器,它就会运行。

我不确定你到底需要什么,但你有两个选择:

  1. 使计时器无效,并以新的时间间隔触发一个新计时器,您甚至可以在类中声明计时器,然后只需覆盖值(在您使无效之后)。

  2. 将重复值设置为 false 并每次都触发新的计时器。

看看这个例子:

class ViewController: UIViewController {
    var difficulty: Double = 1.0
    var timer = NSTimer()

    override func viewDidLoad() {
        activateTimer()
    }

    func activateTimer(){
       timer = NSTimer.scheduledTimerWithTimeInterval(difficulty, target: self, selector: Selector(self.timerMethod()), userInfo: nil, repeats: true)
    }

    func timerMethod() {
        print("Timer method called")
    }

    func endTimer() {
        timer.invalidate()
    }

    func increaseDifficulty() {
      difficulty = 2.0
      endTimer()
      activateTimer()
    }

}

关于Swift NSTimer 动态改变间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38728011/

相关文章:

iphone - AVAudioPlayer - 在 UILabel 上显示倒数计时器

ios - 管理作为变量传递的计时器

快速创建物理关节

swift - 物理速度导致 parent 与 child 分离

ios - 在后台运行计时器

objective-c - NSTimer 作为 self 定位的 ivar

cocoa - NSTimer 的问题

ios - 初始化后如何更改按钮的位置?

ios - Swift:属性未在 super.init 调用时初始化

swift - 如何在导航 View Controller 上滑动时进行即时转换