Simple countdown UILabel with morphing animation, and some useful function.
- Simple creation
- Easily get status of countdown from property and delegate.
- Insert some of function, and completion
- Style change as usual as UILabel do
- Morphing animation from LTMorphingLabel.
- XCTest assertion
Below is a table that shows which version of what you should use for your Swift version.
| Swift version | version |
|---|---|
| 4.2 | >= 4.0 |
| 4.0, 4.1 | >= 3.0 |
| 3.X | >= 2.0 |
| 2.3 | 1.3 |
You need only 2 lines.
// from current Date, after 30 minutes. let countdownLabel = CountdownLabel(frame: frame, minutes: 30) // you can use NSDate as well countdownLabel.start()Use animationType. Those effect comes from LTMorphingLabel.
let countdownLabel = CountdownLabel(frame: CGRectZero, time: 60*60) countdownLabel.animationType = .Pixelate countdownLabel.start()| morphing effect | example |
|---|---|
| .Burn | ![]() |
| .Evaporate | ![]() |
| .Fall | ![]() |
| .Pixelate | |
| .Scale | ![]() |
| .Sparkle | ![]() |
you can directly allocate it as a UILabel property just like usual.
countdownLabel.textColor = .orangeColor() countdownLabel.font = UIFont(name:"Courier", size:UIFont.labelFontSize()) countdownLabel.start()there's some property for reading status.
countdownLabel.timeCounted // timer that has been counted countdownLabel.timeRemaining // timer's remaining // example @IBAction func getTimerCounted(sender: UIButton) { debugPrint("\(countdownLabel.timeCounted)") } @IBAction func getTimerRemain(sender: UIButton) { debugPrint("\(countdownLabel.timeRemaining)") }You can pause, start, change time.
// check if pause or not if countdownLabel.isPaused { // timer start countdownLabel.start() } else { // timer pause countdownLabel.pause() }// -2 minutes for ending @IBAction func minus(btn: UIButton) { countdownLabel.addTime(-2) } // +2 minutes for ending @IBAction func plus(btn: UIButton) { countdownLabel.addTime(2) }Using then function or delegate, you can set your function anywhere you like.
// then property countdownLabel.then(10) { [unowned self] in self.countdownLabel.animationType = .Pixelate self.countdownLabel.textColor = .greenColor() } countdownLabel.then(5) { [unowned self] in self.countdownLabel.animationType = .Sparkle self.countdownLabel.textColor = .yellowColor() } countdownLabel.start() { self.countdownLabel.textColor = .whiteColor() } // delegate func countingAt(timeCounted timeCounted: NSTimeInterval, timeRemaining: NSTimeInterval) { switch timeRemaining { case 10: self.countdownLabel6.animationType = .Pixelate self.countdownLabel6.textColor = .greenColor() case 5: self.countdownLabel6.animationType = .Sparkle self.countdownLabel6.textColor = .yellowColor() default: break } } func countdownFinished() { self.countdownLabel.textColor = .whiteColor() }you can set as attributedText too. note:but morphing animation will be disabled.
countdownLabel.setCountDownTime(30) countdownLabel.timeFormat = "ss" countdownLabel.countdownAttributedText = CountdownAttributedText(text: "timer HERE in text", replacement: "HERE") countdownLabel.start() Don't specified over 24 hours or you'll get wrong format. CountdownLabel uses 00:00:00 (HH:mm:ss) as default format. if you prefer using another format, Your can set your time format like below.
countdownLabel.timeFormat = @"mm:ss"
you can set scheduled timer
// after 10 minutes will start a countdown from 20. let fromDate = NSDate().dateByAddingTimeInterval(10) let targetDate = fromDate.dateByAddingTimeInterval(20) let countdownLabel = CountdownLabel(frame: CGRectZero, fromDate: fromDate, targetDate: targetDate) countdownLabel.start()some public properties are useful.
countdownLabel.isCounting // check timer is counting now countdownLabel.isPaused // check timer was stopped countdownLabel.isFinished // check timer has ended countdownLabel.morphingEnabled // check morphing is enabled- iOS 9.0+
- Swift 2.3+
- ARC
##Installation
####CocoaPods available on CocoaPods. Just add the following to your project Podfile:
pod 'CountdownLabel' use_frameworks! ####Carthage To integrate into your Xcode project using Carthage, specify it in your Cartfile:
github "suzuki-0000/CountdownLabel" - LTMorphingLabel is motivation for creating this.
- In many reference from MZTimerLabel.
available under the MIT license. See the LICENSE file for more info.










