2012-09-12 18 views
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的阿尔法没有设置为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长度的动画动画后),这有点傻。

+0

Alpha值是浮动的,例如, '1.0f'或'0.0f' – TimD

+0

@TimD,编译器足够智能,可将'int's转换为'float'。 – Ravi

回答

0

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

+0

你所描述的是我想要发生的事情,“将alpha设置为零所需的时间太短以至于看不到”,这种情况没有发生。我不希望它动画到0我希望它是0 _immedately_。 – Shizam

+0

“someButton.alpha”在第一个代码示例的第一行中设置为0之前的值是多少? – Ravi

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延迟动画)。

+0

我实际上有一个类似的想法,但它不工作不幸:p – Shizam

+0

uhm所以你没有看到你的按钮alpha设置为0,或者你没有看到动画,这是假设将你的alpha从0改为1?我不认为使用两个动画会出现任何错误,因为您的第一个动画将立即发生。 – tiguero

+0

它并不是说第二个例子(两个动画)有什么内在的错误,它看起来像一个不必要的黑客,因为它不应该像那样。 – Shizam

相关问题