* How To: Working With Timers In Swift
https://learnappmaking.com/timer-swift-how-to/
- 반복타이머 설정 (@objc 필요)
[code]
let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(fire), userInfo: nil, repeats: true)
[/code]
- 클로저로 만들수도 있다
[code]
let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { timer in
print("FIRE!!!")
})
[/code]
- userInfo를 이용해 타이머속 함수에 값을 전달할 수 있다
[code]
let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(fire(timer:)), userInfo: ["score": 10], repeats: true)
@objc func fire(timer: Timer)
{
if let userInfo = timer.userInfo as? [String: Int],
let score = userInfo["score"] {
print("You scored \(score) points!")
}
}
[/code]
- 카운트다운 타이머 생성
[code]
var timer:Timer?
var timeLeft = 60
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(onTimerFires), userInfo: nil, repeats: true)
@objc func onTimerFires()
{
timeLeft -= 1
timeLabel.text = "\(timeLeft) seconds left"
if timeLeft <= 0 {
timer.invalidate()
timer = nil
}
}
[/code]
- 타이머는 run loop와 동시에 돌아간다. 런루프는 상황을 보고 타이머를 돌리는데 tolerence를 주면 타이머에 여유를 줄 수 있다. 애플은 10% 여유분을 권장한다. tolerence는 ±가 아닌 +만을 의미한다. 또한 이번 타이머가 톨러런스에 의해 늦어지더라도 다음 타이머에는 영향을 주지 않는다.
[code]
let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(fire), userInfo: nil, repeats: true)
timer.tolerance = 0.2
[/code]
- 타이머는 메인쓰레드의 run loop에 default mode로 등록되므로 메인쓰레드가 너무 바쁘면 실행되지 않을 수도 있다. 다음과 같이 commonModes로 등록하면 쓰레드가 타이머를 항상 감시하게 된다.
[code]
let timer = Timer(timeInterval: 1.0, target: self, selector: #selector(fire), userInfo: nil, repeats: true)
RunLoop.current.add(timer, forMode: .commonModes)
[/code]
- 타이머가 아닌 Grand Central Dispatch를 이용하여 코드에 딜레이 주기. 타이머는 계속 감시해야 하는데 GCD는 한번만 실행되므로 이쪽이 더 경제적이다.
[code]
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(300)) {
print("BOOYAH!")
}
[/code]
* Build a count down timer with Swift 3.0
https://medium.com/ios-os-x-development/build-an-stopwatch-with-swift-3-0-c7040818a10f
- 카운트다운 타이머를 만드는 예제
- Posted
- Filed under 개발/iOS