Swift:NSTimer自动结束,不会倒计时

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

首先,如何创build一个计时器,当一个ViewController场景打开时自动倒计时? 我的问题是,当场景被打开时,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来select是否有计时器计数或倒计时。 我只需要一个COUNTING DOWN计时器,只有在打开视图时AUTOMATICALLY倒计时。 我怎么做?

请注意,我的时间格式是:timeString函数中所述的“分钟:秒”。

请帮忙。

欢迎来到SO。 我想你在这里头了。

计时器不计数或倒计数。 它定期发射。 你写一个方法,每次定时器触发时被调用。

请注意0​​.05是一个非常短的时间间隔的计时器。 定时器不是非常准确的,所以你可能会试图从中得到太多的东西。

你的代码是一团糟。 你从0开始timeCount 。你的定时器方法,被重复调用,被称为timerDidEnd即使你想让你的定时器继续运行。 您的timerDidEnd方法在计时器触发时从timeCount减去“timeInterval”(.05秒),这会使timeCount为负数。 然后检查timeCount是否小于0(这将是第一次通过此代码),如果是,则使计时器无效。 你也不会做任何事情来显示timeCount的值。

如果你想让代码倒数,你需要从大于0的值开始,每当定时器触发时从它中减去一小部分。 那么你需要用那个timeCount值做一些事情。 如果你没有在某个地方展示它,那真的没有什么用处。

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

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

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