Animate UILabel text between two numbers?
You can use the automatic transitions. It's working perfectly well :
// Add transition (must be called after myLabel has been displayed) CATransition *animation = [CATransition animation];animation.duration = 1.0;animation.type = kCATransitionFade;animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];[myLabel.layer addAnimation:animation forKey:@"changeTextTransition"];// Change the textmyLabel.text = newText;
This code works if myLabel is already displayed. If not myLabel.layer will be nil and the animation will not be added to the object.
in Swift 4 that would be:
let animation: CATransition = CATransition()animation.duration = 1.0animation.type = kCATransitionFadeanimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)myLabel.layer.add(animation, forKey: "changeTextTransition")
It works well!
Objective-C
[UIView transitionWithView:self.label duration:.5f options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionTransitionCrossDissolve animations:^{ self.label.text = rand() % 2 ? @"111!" : @"42";} completion:nil];
Swift 2
UIView.transitionWithView(label, duration: 0.25, options: [.CurveEaseInOut, .TransitionCrossDissolve], animations: { self.label.text = (arc4random() % 2 == 0) ? "111" : "222"}, completion: nil)
Swift 3, 4, 5
UIView.transition(with: label, duration: 0.25, options: [.curveEaseInOut, .transitionCrossDissolve], animations: { self.label.text = (arc4random() % 2 == 0) ? "111" : "222"}, completion: nil)
I found a great engine for tweening values with a variety of different timing functions called PRTween. Install the classes and create some code along these lines:
- (IBAction)tweenValue{ [[PRTween sharedInstance] removeTweenOperation:activeTweenOperation]; PRTweenPeriod *period = [PRTweenPeriod periodWithStartValue:0.0 endValue:100.0 duration:1.0]; activeTweenOperation = [[PRTween sharedInstance] addTweenPeriod:period target:self selector:@selector(update:) timingFunction:&PRTweenTimingFunctionCircOut];}- (void)update:(PRTweenPeriod*)period{ self.animatingView.center = CGPointMake(period.tweenedValue + 100.0, 200.0); self.valueLabel.text = [NSString stringWithFormat:@"%.2f", period.tweenedValue];}
Works a treat for me. :)