Animate UILabel text between two numbers? Animate UILabel text between two numbers? ios ios

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. :)