Анимировать текст UILabel между двумя числами?
Я новичок в программировании iPhone и Mac (разработанный для Windows раньше), и у меня есть вопрос:
как мне оживить text
свойства UILabel
между двумя числами, например,5 до 80 в непринужденном стиле? Возможно ли это с CoreAnimation
?
Я искал в Google в течение часа, но я не нашел ничего, что решило бы мою проблему.
Что я хочу: анимировать деньги пользователей для простой игры. Это не выглядит очень хорошо, когда он просто идет от 50 до 100 или что-то вроде этого без анимации.
каждый, кто имеет представление как это сделать?
спасибо!
5 ответов:
Вы можете использовать автоматические переходы. Он работает отлично:
// 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 text myLabel.text = newText;
этот код работает, если myLabel уже отображается. Если не милабель.слой будет равен нулю, и анимация не будет добавлена к объекту.
на Swift 4 что будет:
let animation: CATransition = CATransition() animation.duration = 1.0 animation.type = kCATransitionFade animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) myLabel.layer.add(animation, forKey: "changeTextTransition")
Он работает хорошо!
С
[UIView transitionWithView:self.label duration:.5f options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionTransitionCrossDissolve animations:^{ self.label.text = rand() % 2 ? @"111!" : @"42"; } completion:nil];
Свифт
UIView.transitionWithView(label, duration: 0.25, options: [.CurveEaseInOut, .TransitionCrossDissolve], animations: { self.label.text = (arc4random() % 2 == 0) ? "111" : "222" }, completion: nil)
Я нашел отличный движок для tweening значений с различными функциями синхронизации под названием PRTween. Установите классы и создайте некоторый код в следующих строках:
- (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]; }
работает хорошо для меня. :)
Если вы хотите, чтобы он считал вверх и вниз с новым номером, отталкивая предыдущий номер (например, тикер или что-то еще):
let animation = CATransition() animation.removedOnCompletion = true animation.duration = 0.2 animation.type = kCATransitionPush animation.subtype = newValue > value ? kCATransitionFromTop : kCATransitionFromBottom animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut) valueLabel.layer.addAnimation(animation, forKey:"changeTextTransition")