我遇到了iPhone动画块的奇怪问题。 这段代码:
[UIView animateWithDuration:2 delay: 0 options: 0 animations:
^(void) { [controller setBackgroundColor: [UIColor blueColor]]; }
completion: nil];
[UIView animateWithDuration:2 delay: 2 options: 0 animations:
^(void) { [controller setBackgroundColor: [UIColor redColor]]; }
completion: nil];
立即将背景设置为红色,而不传递蓝色状态。 即使这个代码也是如此:
[UIView animateWithDuration:2 delay: 0 options: 0 animations:
^(void) { [controller setBackgroundColor: [UIColor blueColor]]; }
completion:
^(BOOL wrwg) {
[UIView animateWithDuration:2 delay: 2 options: 0 animations:
^(void) { [controller setBackgroundColor: [UIColor redColor]]; }
completion: nil];
}];
也就是说,我试图在第一个动画完成之后运行第二个动画。 有什么问题?
答案 0 :(得分:8)
我遇到了同样的问题。使shure控制器的类型为UIView,否则动画块被解释为“无动画执行”,因此被跳过并呈现下一个动画。
另外请看这篇文章,我问同样的问题(由我解决): http://www.iphonedevsdk.com/forum/iphone-sdk-development/64451-animation-one-after-another.html#post265531
答案 1 :(得分:5)
属性backgroundColor
在UIView中是 NOT 动画。相反,请使用视图图层的backgroundColor
属性:
#import <QuartzCore/QuartzCore.h> // don't forget to link this library in project settings
[UIView animateWithDuration:2.0
delay:0.0
options:UIViewAnimatingOptionBeginFromCurrentState
animations:^(void){
controller.layer.backgroundColor = [UIColor blueColor].CGColor;
}
completion:NULL];
P.S。正如之前的帖子所指出的那样,请确保controller
继承自UIView
。如果它是从UIViewController
继承的,请改用controller.view
。
答案 2 :(得分:3)
我刚遇到这个问题,我通常都有这个问题。有两个原因,虽然有一个是我尚未测试的。
原因之一,我忘了将界面构建器连接到动画视图,因此块说“Animate on nil?没什么可做的,所以我要跳到完成块!”
另一个原因是,有一些事情要做,但它不是一个可动画的属性(隐藏),我敢打赌,一旦动画中的变量与“to”或“end”匹配,就会调用完成块“国家。这只是一个理论,但我认为它是一个单独的线程,以一定的速度执行: if(currentValueOfProperty = finalValue)doCompletion()。 (原谅伪代码)。
有人应该测试一下,不过