使用animateWithDuration更改UIButton的标题没有延迟或动画

时间:2014-01-15 21:30:58

标签: ios objective-c animation uibutton

我有一个开始按钮,初始文本“Start”连接到Interface Builder中的一个动作。

然而,动画开始并立即结束,而不是花费3 + 5秒。这段代码有什么问题?

@interface ViewController()
@property (weak, nonatomic) IBOutlet UIButton *startButton;
@end

@implementation ViewController

- (IBAction)startPressed:(UIButton *)sender
{
    [UIView animateWithDuration:3 delay:5
        options:UIViewAnimationOptionCurveEaseInOut
        animations:^{
            [self.startButton setTitle:@"New Title" forState:UIControlStateNormal];
        } 
        completion:nil];
}

@end

更新:当然,这些回复都是正确的。我使用了Jack Wu的建议,虽然没有隐藏文本,但是setTitle会让按钮在屏幕上闪回。

- (IBAction)startPressed:(UIButton *)sender
{
    [UIView animateWithDuration:1.5 delay:5
        options:UIViewAnimationOptionCurveEaseInOut
                     animations:^{ self.startButton.alpha = 0; }
                     completion:^(BOOL c){ if (c) {
        self.startButton.hidden = YES;
        [self.startButton setTitle:@"newTitle" forState:UIControlStateNormal];
        [UIView animateWithDuration:1.5 delay:0 options:UIViewAnimationOptionCurveEaseInOut
                         animations:^{
                             self.startButton.hidden = NO;
                             self.startButton.alpha = 1;
                         }
                         completion:nil];

    }}];
}

2 个答案:

答案 0 :(得分:4)

按钮的标题不是可动画的属性,因此您将立即看到它返回。这是设计的。您可以在其documentation中找到UIView的可动画属性。这是他们今天的情况。

@property frame
@property bounds
@property center
@property transform
@property alpha
@property backgroundColor
@property contentStretch

或者,您可以在按钮中添加两个子视图标签,并在动画中交叉淡化它们。

答案 1 :(得分:1)

标题不是UIButton的可动画属性。正如其他人所建议的那样,你需要通过淡化按钮,更改标题和淡化它来自己创建动画。

您还可以编写自定义动画代码,该代码将获取按钮的位图快照,将其放在当前按钮的顶部,更改位图快照下的按钮标题,然后淡出并删除位图。这会给你一个交叉淡化效果,但这将是相当多的工作。