Sha*_*rky 3 block objective-c uiviewanimation
下面的代码显示了一个标签动画,其中包含用户的状态消息.如果事件发生,标签显示提示,并通过uiview动画块慢慢消失.
- (void)showStatusOnLabelWithString:(NSString *)statusMessage
{
// [self.view.layer removeAllAnimations]; // not working
[labelStatus.layer removeAllAnimations]; // not working, too
[labelStatus setText:statusMessage];
[labelStatus setHidden:NO];
[labelStatus setAlpha:1.0];
[UIView animateWithDuration:5.0 animations:^
{
[labelStatus setAlpha:0.0];
} completion:^(BOOL finished)
{
[labelStatus setHidden:YES];
[labelStatus setAlpha:1.0];
}];
}
Run Code Online (Sandbox Code Playgroud)
如果在第一个标签应该再次动画之后的下一个5s中有另一个事件,那么我删除了上一个动画[self.view.layer removeAllAnimations](这就是我的想法).但标签刚刚完全消失,接下来的5s标签再次看不见.
如果我(或用户)等待5s一切正常.
为什么这不起作用?
亲切的问候,$ h @ rky
改变这个:
completion:^(BOOL finished)
{
[labelStatus setHidden:YES];
[labelStatus setAlpha:1.0];
}];
Run Code Online (Sandbox Code Playgroud)
对此:
completion:^(BOOL finished)
{
if (finished) {
[labelStatus setHidden:YES];
[labelStatus setAlpha:1.0];
}
}];
Run Code Online (Sandbox Code Playgroud)
原因是当您删除图层的动画时,您将到达此完成块,但这finished是false因为您中断了它.此外,订单在这里很重要.也许你期望removeAllAnimations立即调用完成块,但是在你的showStatusOnLabelWithString:方法完成之后它会被调用,所以发生的事情是你正在setHidden:NO紧接着调用setHidden:YES.
| 归档时间: |
|
| 查看次数: |
2463 次 |
| 最近记录: |