为什么动画块外部设置的某些可动画属性不会生效?

时间:2012-09-12 21:02:51

标签: iphone objective-c ios animation

我有一些代码如下:

//up till now someButton's alpha was 1
someButton.alpha = 0;
[UIView animateWithDuration:.25
                      delay:0.0
                    options:kMaskEaseOut
                 animations:^ {
                     someButton.alpha = 1;
                 }
                 completion:^ (BOOL finished){}];

问题是在动画开始之前,某些按钮的alpha不会设置为0,即没有任何视觉效果。现在,如果我注释掉整个动画块,它确实会将someButton的alpha设置为0.另外,如果我这样做:

    [UIView animateWithDuration:0
                      delay:0.0
                    options:kMaskEaseOut
                 animations:^ {
                     someButton.alpha = 0;
                 } completion:^ (BOOL finished){
                     [UIView animateWithDuration:.25
                                           delay:0.0
                                         options:kMaskEaseOut
                                      animations:^ {
                                          someButton.alpha = 1;
                                      }
                                      completion:^ (BOOL finished){}];
                 }];

它工作正常(我在0长度动画后启动动画),这有点傻。

2 个答案:

答案 0 :(得分:0)

好吧,可能是因为将alpha设置为零所需的持续时间非常短,以至于您无法看到它(它只是一行代码 - 暂时发生 - 并且执行速度与任何其他行一样快代码),但是从那一刻开始,将alpha更改为1需要0.25秒。这可能是你没有看到alpha设置为0的动画,但可以看到它回到1的原因。解释适用于您的第二个代码示例。

答案 1 :(得分:0)

检查this,特别是Animations部分(他们的示例与您的相似:hideShowView)。两个代码中这种行为差异的原因是动画发生在另一个线程中,发生立即

 //up till now someButton's alpha was 1
 someButton.alpha = 0;
 [UIView animateWithDuration:.25
                          delay:0.0
                        options:kMaskEaseOut
                     animations:^ {
                         someButton.alpha = 1;
                     }
                     completion:^ (BOOL finished){}];
 NSLog(@"%d", someButton.alpha); // will display 1 not 0

我认为如果您不想注释动画(在第二个代码源中延迟为0的动画),您可能会略微延迟动画。