我有一个开始按钮,初始文本“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];
}}];
}
答案 0 :(得分:4)
按钮的标题不是可动画的属性,因此您将立即看到它返回。这是设计的。您可以在其documentation中找到UIView的可动画属性。这是他们今天的情况。
@property frame
@property bounds
@property center
@property transform
@property alpha
@property backgroundColor
@property contentStretch
或者,您可以在按钮中添加两个子视图标签,并在动画中交叉淡化它们。
答案 1 :(得分:1)
标题不是UIButton的可动画属性。正如其他人所建议的那样,你需要通过淡化按钮,更改标题和淡化它来自己创建动画。
您还可以编写自定义动画代码,该代码将获取按钮的位图快照,将其放在当前按钮的顶部,更改位图快照下的按钮标题,然后淡出并删除位图。这会给你一个交叉淡化效果,但这将是相当多的工作。