Skip to content

Instantly share code, notes, and snippets.

@aybekckaya
Last active June 3, 2019 19:22
Show Gist options
  • Save aybekckaya/30e9c084e63b8c9b7db8e41389f8700b to your computer and use it in GitHub Desktop.
Save aybekckaya/30e9c084e63b8c9b7db8e41389f8700b to your computer and use it in GitHub Desktop.
class ChronometerVC: UIViewController {
private var displayLink:DisplayLink?
private let lblCounter:UILabel = {
let lbl = UILabel()
lbl.font = UIFont(name: "Verdana", size: 28)
lbl.textAlignment = NSTextAlignment.center
lbl.textColor = UIColor.black
return lbl
}()
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
displayLink?.releaseDisplayLink()
self.displayLink = nil
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
setUpDisplayLink()
setUpUI()
}
override func viewDidLoad() {
super.viewDidLoad()
}
private func setUpDisplayLink() {
guard displayLink == nil else { return }
displayLink = DisplayLink()
displayLink?.displayLinkUpdated = { timeInterval in
self.updateCounter(timeInterval: timeInterval)
}
displayLink?.startDisplayLink()
}
private func updateCounter(timeInterval:CFTimeInterval) {
let minutes:Int = Int(timeInterval/60)
let seconds:Int = Int(timeInterval) - minutes*60
let miliseconds:Int = Int((timeInterval - Double(minutes)*60 - Double(seconds))*1000)
self.lblCounter.text = minutes.timeString(digits: 2)+":"+seconds.timeString(digits: 2)+":"+miliseconds.timeString(digits:3)
}
private func setUpUI() {
self.view.addSubview(lblCounter)
lblCounter.text = ""
lblCounter.frame = CGRect(x: 0, y: 0, width: 200, height: 200)
lblCounter.center = self.view.center
}
}
// Converting integer to human readable string
extension Int {
func timeString(digits:Int)->String {
var str:String = String(describing:self)
if str.count >= digits {
return str
}
for _ in 0..<digits - str.count {
str = "0"+str
}
return str
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment