我是IOS编程新手。 我想在应用程序启动时自动切换按钮边框颜色以吸引用户注意, 我尝试了以下代码,但只选择了最终颜色。
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelay:0.0];
[UIView setAnimationDuration:3.0];
button.layer.borderWidth=2.5f;
button.layer.borderColor=[[UIColor blueColor]CGColor];
[UIView setAnimationDelay:3.0];
button.layer.borderColor=[[UIColor clearColor]CGColor];
[UIView setAnimationDelay:6.0];
button.layer.borderColor=[[UIColor redColor]CGColor];
[UIView commitAnimations];
}
答案 0 :(得分:1)
您正在做的是链接动画的无效方式。因此,仅应用最后的更改。此外,您应该使用基于块的动画,这是Apple自iOS 4以来推荐的动画。应该是这样的:
[UIView animateWithDuration:3.0 animations:^{
button.layer.borderWidth=2.5f;
button.layer.borderColor=[[UIColor blueColor]CGColor];
} completion:^(BOOL finished) {
[UIView animateWithDuration:3.0 animations:^{
button.layer.borderColor=[[UIColor clearColor]CGColor];
} completion:^(BOOL finished) {
[UIView animateWithDuration:3.0 animations:^{
button.layer.borderColor=[[UIColor redColor]CGColor];
}];
}];
}];
答案 1 :(得分:1)
这个答案与 0x7fffffff 的答案相同,只不过它使用了块变量,所以它看起来更清晰,希望更有意义:
void (^animateToRed)(BOOL finished) = ^(BOOL finished) {
[UIView animateWithDuration:3.0 animations:^{
button.layer.borderColor=[[UIColor redColor]CGColor];
} completion: nil];
}
void (^animateToClear)(BOOL finished) = ^(BOOL finished) {
[UIView animateWithDuration:3.0 animations:^{
button.layer.borderColor=[[UIColor clearColor]CGColor];
} completion:animateToRed];
}
[UIView animateWithDuration:3.0 animations:^{
button.layer.borderWidth=2.5f;
button.layer.borderColor=[[UIColor blueColor]CGColor];
} completion:animateToClear];
UIView
' animateWithDuration:animations:completion:
方法是随时间变化动画的最佳方式。
需要3个参数。
此代码段创建两个完成块。
animateToRed
完成块处理边框动画为红色。它的完成块是nil
,此时我们已完成动画制作。
animateToClear
完成块处理要清除边框的动画。它的完成块是我们刚刚定义的animateToRed
。
最后,我们调用animateWithDuration
,将边框设置为蓝色,然后传递animateToClear
块以完成(反过来调用animateToRed
块)。
对于这个简单且没有重复动画的动画,以这种方式执行它可能看起来有点过分(尽管它稍微更具可读性)。然而,对于一系列更复杂的动画,特别是如果有任何重复性,创建像这样的块变量来使用和快速传递会变得非常有用。