Hello everyone,
Here in this tutorial I will show you how you can create a Custom View for Timer without any layout in Swift.
Custom Timer Class
Our Custom timer class will look like this
var timerBorderWidth : Int = 2; var timerWidth : Float = 30; var timeRadius : Float = 40; var timerVal : Int = 10; var timer : Timer!; import UIKit class TimerView : UIView{ struct Stored{ // Inorder to access globally in this class static var timerLabel : UILabel! } class func loadingCountDownTimerInView (_superView : UIView) -> TimerView{ let timerView : TimerView = TimerView(frame: _superView.frame) timerView.backgroundColor = UIColor.white.withAlphaComponent(1.0) _superView.addSubview(timerView) // Make a Circle View let retFrame = CGRect(x:_superView.center.x - CGFloat(timerWidth), y:_superView.center.y - CGFloat(timerWidth), width:CGFloat(timerWidth * 3), height:CGFloat(timerWidth * 3)); let circleView : UIView = UIView(frame: retFrame); circleView.layer.cornerRadius = CGFloat(timeRadius); circleView.layer.borderColor = UIColor.blue.cgColor; circleView.layer.borderWidth = CGFloat(timerBorderWidth); // Make a Label Stored.timerLabel = UILabel(frame: circleView.bounds) Stored.timerLabel.text = "\(timerVal)" Stored.timerLabel.textColor = UIColor.black Stored.timerLabel.textAlignment = NSTextAlignment.center circleView.addSubview(Stored.timerLabel) timerView.addSubview(circleView) return timerView } func startTimer(){ timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateTimer(dt:)), userInfo: nil, repeats: true) } func updateTimer(dt:Timer){ timerVal = timerVal - 1 if timerVal == 0{ Stored.timerLabel.text = "Done" }else if timerVal < 0{ timer.invalidate() //super.removeFromSuperview() }else { Stored.timerLabel.text = "\(timerVal)" } } }
Here I am passing the superview in which timerview is going to be placed as the parameter.
Then I am creating a circle view for showing the timer borders.
Now I will add a label to show the timer ticking.
Then I will add the label and the circle view to the timerview and then return the timerView.
After that I will start the timer with the startTimer method.
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateTimer(dt:)), userInfo: nil, repeats: true)
On Each tick it will call the “updateTimer” method which accepts the timer and updates the UI accordingly.
Usage
ViewController
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let timerView : TimerView = TimerView.loadingCountDownTimerInView(_superView: self.view) timerView.startTimer() } }
You can simply copy paste this code and it will work.
Cool Demo on Timer View.
Thanks