UIView animateWithDuration:延迟:工作很奇怪

时间:2010-11-09 21:40:00

标签: iphone objective-c animation uiview

我遇到了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];
}];

也就是说,我试图在第一个动画完成之后运行第二个动画。 有什么问题?

3 个答案:

答案 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()。 (原谅伪代码)。

有人应该测试一下,不过