我有一些代码如下:
//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长度动画后启动动画),这有点傻。
答案 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的动画),您可能会略微延迟动画。