摘要:在iOS上实现连续计时,可以使用以下方法之一:1. 使用NSTimer: - NSTimer是iOS中常用的计时器类。可以创建一个重复触发的NSTimer实例,让它周期性地执行某个方法,从而实现连续计时。 - 示例代码: ```swift var timer: Timer? ...
在iOS上实现连续计时,可以使用以下方法之一:
1. 使用NSTimer:
- NSTimer是iOS中常用的计时器类。可以创建一个重复触发的NSTimer实例,让它周期性地执行某个方法,从而实现连续计时。
- 示例代码:
```swift
var timer: Timer?
var elapsedTime: TimeInterval = 0
func startTimer() {
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { [weak self] _ in
self?.elapsedTime += 1
// 在这里更新UI或者执行其他操作
}
}
func stopTimer() {
timer?.invalidate()
timer = nil
}
```
2. 使用CADisplayLink:
- 如果需要更高频率的更新(比如动画相关的)、且想与屏幕刷新同步,可以使用CADisplayLink。
- 示例代码:
```swift
var displayLink: CADisplayLink?
var startTime: CFTimeInterval = 0
func startDisplayLink() {
startTime = CACurrentMediaTime()
displayLink = CADisplayLink(target: self, selector: #selector(update))
displayLink?.add(to: .main, forMode: .default)
}
@objc func update() {
let currentTime = CACurrentMediaTime()
let elapsedTime = currentTime - startTime
// 在这里可以更新UI,例如 label.text = "\(elapsedTime)"
}
func stopDisplayLink() {
displayLink?.invalidate()
displayLink = nil
}
```
3. 使用DispatchSourceTimer:
- DispatchSourceTimer是基于GCD(Grand Central Dispatch)的解决方案,可以更精确地控制时间间隔和执行队列。
- 示例代码:
```swift
var timer: DispatchSourceTimer?
var elapsedTime: TimeInterval = 0
func startGCDTimer() {
let queue = DispatchQueue(label: "com.example.timer")
timer = DispatchSource.makeTimerSource(queue: queue)
timer?.schedule(deadline: .now(), repeating: 1.0)
timer?.setEventHandler { [weak self] in
self?.elapsedTime += 1
DispatchQueue.main.async {
// 更新UI或者执行其他操作
}
}
timer?.resume()
}
func stopGCDTimer() {
timer?.cancel()
timer = nil
}
```
每种方法都有各自的优缺点,选择合适的实现方式可以根据具体的应用场景和对精度、频率的要求来决定。