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