28

在这里,我找到了如何UIButton使用现已弃用的beginAnimations:context:方法为 的标题更改设置动画:

iPhone的UIBUtton标题动画

如何使用当前的 API 做同样的事情?

更新:

我尝试使用基于块的动画:

NSTimeInterval animationDuration = animated ? 1.f : 0.f;
[UIView animateWithDuration:animationDuration delay:0.f options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionAllowUserInteraction animations:^{
    [button setTitle:newTitle forState:UIControlStateNormal];
    [button setTitleColor:newTitleColor forState:UIControlStateNormal];
} completion:nil];

颜色变化不是动画的。

4

3 回答 3

54

使用块:

[UIView transitionWithView:self.flipLabelButton duration:1 options:UIViewAnimationOptionTransitionFlipFromRight animations:^{

    [self.flipLabelButton setTitle:newText forState:UIControlStateNormal];

} completion:nil];
于 2012-11-05T12:25:23.020 回答
31

迅速

UIView.transition(with: button, duration: 0.5, options: .transitionCrossDissolve, animations: {
  self.button.setTitle("WOW, new title", for: .normal)
  self.button.setTitleColor(UIColor.red, for: .normal)
}, completion: nil)
于 2016-11-29T01:51:06.517 回答
8

除了AnimationGroups,一般有两种动画,一种是属性动画,另一种是动画你的内容,过渡或任何不能使用属性做动画的东西。所以第二个解决方案是你的选择,你可以通过两种方式实现:使用 CATransition:

CATransition *transition = [CATransition animation];
transition.type = kCATransitionFade;
transition.duration = 1;
[button.layer addAnimation:transition forKey:kCATransition];
[button setTitle:newTitle forState:UIControlStateNormal];
[button setTitleColor:newColor forState:UIControlStateNormal];

另一种方法是使用@jjv360 所说的 UIKit 块,但你不能在其中设置颜色动画,因为显然颜色不能被翻转。

于 2015-08-31T09:40:18.173 回答