IOS swift倒计时器不会停止

时间:2015-12-26 13:52:37

标签: ios swift timer swift2

我试图让倒数计时器从60秒开始倒计时,然后在达到0时停止。但是计时器会持续进入负秒。任何建议表示赞赏。代码:

@IBOutlet var timeCounter: UILabel!
var second = 60

var timer = NSTimer()

var timerRunning = true

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.


    setTimer()
    timerCounting()
 }

func setTimer(){
    second  -= 1
    timeCounter.text = "\(second)"


}

func timerCounting(){
    if(timerRunning == true){

        timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("setTimer"), userInfo: nil, repeats: true)
        timerRunning = true
        if second == 0 {
            timerRunning = false
            timer.invalidate()


        }


    }


}

2 个答案:

答案 0 :(得分:6)

您必须将失效移到setTimer函数中,因为永远不会触发其当前位置,因为timerCounting只在一开始被调用一次。

func setTimer(){
    second  -= 1
    timeCounter.text = "\(second)"
    if second == 0 {
        timerRunning = false
        timer.invalidate()
    }
}

答案 1 :(得分:0)

在游乐场玩这个

import XCPlayground
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
import Foundation


@objc class C:NSObject {
    var timer: NSTimer?
    var second = 5
    func setTimer(){
        if c.second < 0 {
            print("the timer fires the last time here ...")
            timer?.invalidate()
        } else {
            print(second)
            second  -= 1
        }
    }
}

let c = C()

func timerCounting(){
        c.timer = NSTimer.scheduledTimerWithTimeInterval(1, target: c, selector: Selector("setTimer"), userInfo: nil, repeats: true)
}

timerCounting()