无法使计时器swift无效

时间:2017-08-21 12:25:25

标签: ios swift timer

在我的应用程序中我应该使用多个计时器,但我不想为每个函数添加单独的计时器,如何创建一个简化创建多个计时器的函数,我在下面尝试了这个代码,它可以工作,但我不能使计时器无效。

BizTalk

3 个答案:

答案 0 :(得分:2)

您永远不会为变量分配新值。您创建的计时器不会保存在任何位置,因此您无法使它们失效。

我建议进行以下更改:

private val r: Runnable = Runnable {
    if (isRotate) {
        fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_camera, null))
        isRotate = false
    } else {
        fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_gallery, null))
        isRotate = true
    }
}

这将确保在分配新计时器时,前一个计时器始终无效。然后,您可以使用var timer: Timer? { didSet { oldValue?.invalidate() } } var timer2: Timer? { didSet { oldValue?.invalidate() } } timer = nil无效。

此外,您应该从您的方法返回计时器:

timer2 = nil

并按以下方式使用:

func timerWithDifferentIntervals(interval: TimeInterval, target: Any, selector: Selector, userInfo: Any?, repeats: Bool) -> Timer {
  return Timer.scheduledTimer(timeInterval: interval, target: target, selector: selector, userInfo: userInfo, repeats: repeats)
}

虽然这个方法现在基本上什么也没做,所以不需要它

答案 1 :(得分:0)

在数组中添加NStimers,每个计时器都有自己的标记。

然后,无论何时想要使计时器无效,都要通过数组到达并使其无效。

希望这有帮助!

答案 2 :(得分:0)

我认为您应该使用以下代码进行计时器创建和无效

var timer : NSTimer?

func startTimer(_ timeInterval: Int, _ isRepeat: Bool)
{
  if timer == nil {
    timer = NSTimer.scheduledTimerWithTimeInterval(timeInterval, target: self, selector: "timerFired", userInfo: nil, repeats: isRepeat)
  }
}

func stopTimer()
{
  if timer != nil {
    timer!.invalidate()
    timer = nil
  }
}