我将如何在 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/