ios - 在 ScrollView 上创建计时器

标签 ios swift timer scrollview

我将如何在 ScrollView 上创建计时器函数。

我已经实现了一个可以正常工作的计时器函数,但是由于 ScrollView 的性质,每次滑动页面并且计时器重置时 View Controller 都会加载。

如何存储 ScrollView 每个页面的计时器值,以便它不会重置?

以下是我的计时器函数:

override func viewDidAppear(animated: Bool) {

    // Start Timer Variables
    startGame()
    timerButtonStart()

}

定时器功能

// Mark : Timer Functions

func startGame() {

    let aSelector : Selector = "updateTime"
    timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: aSelector, userInfo: nil, repeats: true)
    startTime = NSDate.timeIntervalSinceReferenceDate()

}

@IBAction func pauseTimer(sender: AnyObject) {

    if timerPaused == false {

        elapsedTime += startTimeDate.timeIntervalSinceNow
        timer.invalidate()
        timerPaused = true

    } else {
        let aSelector : Selector = "updateTime"
        timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: aSelector, userInfo: nil, repeats: true)
        startTimeDate = NSDate()
        startTime = NSDate.timeIntervalSinceReferenceDate() + elapsedTime
        timerPaused = false
    }
}

func updateTime() {

    var currentTime = NSDate.timeIntervalSinceReferenceDate()

    //Find the difference between current time and start time.
    var elapsedTime: NSTimeInterval = currentTime - startTime

    //calculate the minutes in elapsed time.
    let minutes = UInt8(elapsedTime / 60.0)
    elapsedTime -= (NSTimeInterval(minutes) * 60)

    //calculate the seconds in elapsed time.
    let seconds = UInt8(elapsedTime)
    elapsedTime -= NSTimeInterval(seconds)

    //find out the fraction of milliseconds to be displayed.
    let fraction = UInt8(elapsedTime * 100)

    //add the leading zero for minutes, seconds and millseconds and store them as string constants
    let strMinutes = minutes > 9 ? String(minutes):"0" + String(minutes)
    let strSeconds = seconds > 9 ? String(seconds):"0" + String(seconds)
    strMinutesGlobal = strMinutes
    strSecondsGlobal = strSeconds

    //concatenate minuets, seconds and milliseconds as assign it to the UILabel
    timerLabel.text = "\(strMinutesGlobal!):\(strSecondsGlobal!)"
}


func timerButtonStart() {
    var refreshButton = UIBarButtonItem(barButtonSystemItem: .Refresh, target: self, action: "timer") //Use a selector
    navigationItem.leftBarButtonItem = refreshButton

    navigationController!.navigationBar.barTintColor = UIColor.greenColor()
    title = "Search result"
}

最佳答案

如果你想防止你的 NSTimer 在切换 View Controller 时被释放,你可以将 NSTimer 实例存储在一个单独的单例类中,而不是 View Controller 中。

class MyTimer {
    var sharedInstance = MyTimer()

    var timer: NSTimer?
}

这样,您就可以像这样访问 NSTimer 实例:

MyTimer.sharedInstance.timer

关于ios - 在 ScrollView 上创建计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31725651/

相关文章:

ios - 如何以编程方式创建多个按钮和操作?

ios - 以编程方式自动布局并出现 ScrollView 错误

ios - 如何在 swift 中使用 alamofire 和 swiftyjson 解析分页 url?

swift - 多个按钮执行相同的 takePicture Action Swift

java - 以可变的时间间隔重复运行任务

c - 如何使用PIC18在 Debug模式下模拟中断?

C编程: I want subtract a weight per second

iOS:来自多个 UIView 的单页 PDF

ios - 即使键盘关闭,也保持搜索栏取消按钮色调颜色

ios - NSPredicate 格式