为什么有些动画属性中设置动画块外没有生效?(Why do some animatable prope

2019-10-17 05:42发布

我有一点说是这样的代码:

//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的阿尔法没有设置为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长度的动画动画后),这是一种愚蠢的。

Answer 1:

好了,可能是因为它采取了设置时间alpha为零是如此之低,你看不到它(这只是一个代码行-发生的瞬间-和快速执行的其他代码线),但是从目前看上,它需要0.25秒改变阿尔法回1.这可能是你没有看到alpha设置的动画为0的原因,但是可以看到它回到1同样的解释持有好你的第二个代码样品。



Answer 2:

检查这个 ,特别是部分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延迟动画)。



文章来源: Why do some animatable properties set outside an animation block not take effect?