1

我有一些这样的代码:

//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){}];

问题是 someButton 的 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 长度动画后开始动画),这有点傻。

4

2 回答 2

0

检查这个,特别是部分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 的动画),我认为您可以稍微延迟动画。

于 2012-09-12T23:36:03.100 回答
0

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

于 2012-09-12T21:32:27.553 回答