* How To: Working With Timers In Swift
https://learnappmaking.com/timer-swift-how-to/
- 반복타이머 설정 (@objc 필요)
let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(fire), userInfo: nil, repeats: true)


- 클로저로 만들수도 있다
let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { timer in
    print("FIRE!!!")
})


- userInfo를 이용해 타이머속 함수에 값을 전달할 수 있다
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!")
    }
}


- 카운트다운 타이머 생성
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
    }
}


- 타이머는 run loop와 동시에 돌아간다. 런루프는 상황을 보고 타이머를 돌리는데 tolerence를 주면 타이머에 여유를 줄 수 있다. 애플은 10% 여유분을 권장한다. tolerence는 ±가 아닌 +만을 의미한다. 또한 이번 타이머가 톨러런스에 의해 늦어지더라도 다음 타이머에는 영향을 주지 않는다.
let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(fire), userInfo: nil, repeats: true)
timer.tolerance = 0.2


- 타이머는 메인쓰레드의 run loop에 default mode로 등록되므로 메인쓰레드가 너무 바쁘면 실행되지 않을 수도 있다. 다음과 같이 commonModes로 등록하면 쓰레드가 타이머를 항상 감시하게 된다.
let timer = Timer(timeInterval: 1.0, target: self, selector: #selector(fire), userInfo: nil, repeats: true)
RunLoop.current.add(timer, forMode: .commonModes)


- 타이머가 아닌 Grand Central Dispatch를 이용하여 코드에 딜레이 주기. 타이머는 계속 감시해야 하는데 GCD는 한번만 실행되므로 이쪽이 더 경제적이다.
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(300)) {  
    print("BOOYAH!")
}


* Build a count down timer with Swift 3.0
https://medium.com/ios-os-x-development/build-an-stopwatch-with-swift-3-0-c7040818a10f
- 카운트다운 타이머를 만드는 예제
2019/05/08 10:34 2019/05/08 10:34

Tags: , ,

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

Comment on this post!