下面的代码显示了一个标签动画,其中包含用户的状态消息。如果事件发生,标签显示提示并且正在通过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];
}];
}
如果在第一个标签后面的第二个标签应该再次设置动画,那么我会删除上一个动画[self.view.layer removeAllAnimations]
(这就是我的想法)。
但标签刚刚完全消失,接下来的5s标签再次看不见。
如果我(或用户)等待5s,一切正常。
为什么这不起作用?
亲切的问候, $ H @ RKY
答案 0 :(得分:6)
改变这个:
completion:^(BOOL finished)
{
[labelStatus setHidden:YES];
[labelStatus setAlpha:1.0];
}];
到此:
completion:^(BOOL finished)
{
if (finished) {
[labelStatus setHidden:YES];
[labelStatus setAlpha:1.0];
}
}];
原因是,当您移除图层的动画时,您将到达此完成功能块,但finished
将false
因为您已中断它。此外,订单在这里很重要。也许你期望removeAllAnimations
立即调用完成块,但是在你的showStatusOnLabelWithString:
方法完成之后它会被调用,所以发生的事情是你正在调用setHidden:NO
然后立即调用{{ 1}}。
答案 1 :(得分:0)
您是否尝试从标签的图层(labelStatus.layer
)中删除动画?