Swift:NSTimer自动结束而不倒计时

时间:2016-01-19 02:39:08

标签: ios swift nstimer

Swift新手在这里。我有两个问题:

首先,如何在打开ViewController场景时创建一个AUTOMATICALLY倒计时的计时器?我的问题是当场景打开时NSTimer会自动结束。

例如,每当我进入上述场景时,TimerLabel都说:“时间到了!”

在我的第二个问题之前,下面是我调整过的代码:makeapppie.com/.../swift-swift-using-nstimer-to-make-a-timer ... /

var timer = NSTimer()
let timeInterval:NSTimeInterval = 0.05
let timerEnd:NSTimeInterval = 120.0 //Timer should end in 120 seconds
var timeCount:NSTimeInterval = 0.0
func timerDidEnd(timer:NSTimer){
    timeCount = timeCount - timeInterval
    if timeCount <= 0 {
        TimerLabel.text = "Time's Up!"
        timer.invalidate()
    }
}

func timeString(time:NSTimeInterval) -> String {
    let minutes = Int(time) / 60
    let seconds = time - Double(minutes) * 60
    return String(format:"%02i:%02i",minutes,Int(seconds))
}

func StartTimer() { // Function called in viewDidLoad
    if !timer.valid{
        TimerLabel.text = timeString(timeCount)
        timer = NSTimer.scheduledTimerWithTimeInterval(timeInterval,
        target: self,
        selector: "timerDidEnd:",
        userInfo: nil,
        repeats: true)
    }
}

我的第二个问题是:我不想使用任何UISwitch来选择是否让计时器计数或倒计时。我只需要一个COUNTING DOWN计时器,当打开视图时,它会自动倒计时。我该怎么做?

请注意我的时间格式为:“minutes:seconds”,如timeString函数中所述。

请帮忙。

2 个答案:

答案 0 :(得分:0)

欢迎来到SO。我想你在这里过得很开心。

计时器不会倒计时或倒计时。它会定期发射。你编写了一个每次定时器触发时调用的方法。

请注意,0.05是计时器的相当短的间隔。定时器不是超精确的,所以你可能试图从它们中获取太多东西。

你的代码混乱了。您从0开始timeCount。即使您希望计时器继续运行,您的计时器方法也会被称为timerDidEnd。当计时器触发时,你的timerDidEnd方法从timeCount减去“timeInterval”(。05秒),这使得timeCount为负数。然后检查timeCount是否小于0(这是第一次通过此代码),如果是,则使计时器无效。您也永远不会做任何事情来显示timeCount的价值。

如果你想要倒计时的代码,你需要从一个大于0的值开始,并在每次计时器触发时从中减去一小部分。然后你需要用timeCount值做一些事情。如果你没有在某个地方展示它,它实际上没有做任何有用的事情。

P.S。在一个不相关的主题上,SO上的头像图片是方形的。你应该张贴一个方形头像图片(或者创建一个方形裁剪来发布。)当你张贴一张矩形图片时,它会变得非常粗糙并且看起来很糟糕。

答案 1 :(得分:0)

  

我的问题是当场景打开时NSTimer会自动结束。

这听起来像是将您的NSTimer和管理它的代码放在视图控制器中。在这种情况下,当视图控制器执行时,计时器消失并不奇怪。如果计时器应该从一个视图控制器持续到下一个视图控制器,那么您应该从一个完全独立的对象与视图控制器进行管理。由于您不希望计时器对象必须跟踪可能对其感兴趣的所有视图控制器,因此请发布感兴趣的视图控制器可以监听的通知。