Objective c UIView将消失时,UIView动画停止
我不太喜欢iOS动画。我试图实现的是一个简单的消息视图,它从屏幕底部垂直滑动到给定的y,然后在几秒钟后UIView垂直回滚到屏幕外Objective c UIView将消失时,UIView动画停止,objective-c,objective-c-blocks,uiviewanimation,Objective C,Objective C Blocks,Uiviewanimation,我不太喜欢iOS动画。我试图实现的是一个简单的消息视图,它从屏幕底部垂直滑动到给定的y,然后在几秒钟后UIView垂直回滚到屏幕外 [UIView animateWithDuration:0.5f animations:^{ self.messageView.frame=CGRectMake(x, y -80, width, height); } co
[UIView animateWithDuration:0.5f
animations:^{
self.messageView.frame=CGRectMake(x, y -80, width, height);
}
completion:^(BOOL finished){
if (finished) {
[UIView animateWithDuration:0.5f delay:2.0f options:UIViewAnimationOptionCurveLinear
animations:^{
self.messageView.frame=CGRectMake(x, y + 80, width, height);
}
completion:^(BOOL finished){
// do something...
}
];
}
} ];
这工作正常,但在iOS UITabBar应用程序中使用此机制时遇到问题:当我更改选项卡时,动画停止,我实际上可以看到“完成”完成为“false”。因此,不调用第二个块,消息视图保持打开状态
以下是问题:
- 我首先关心的是了解我编写的代码是否正确,关于嵌套动画
- 我可以通过忽略“已完成”并执行代码来解决问题,但我觉得这不是一个好主意
- 在最后一个完成块中,我加入了一些编程逻辑,基本上我恢复了一些UIButtons状态,以及一些其他的小UI更改。在这一点上,我不知道这是否是一个好主意,似乎不是,但如何才能让UI知道消息视图已经消失。当涉及快速响应的UI更改时,NSNotification和KVO似乎不是一个好主意
[sel.view removeAllAnimations];
我的建议是创建SimpleMessageViewDelegate协议,该协议具有-(void)messageFinished(或类似的)方法,该方法在消息演示结束时被调用以恢复UI。您还可以在messageFinished结束时设置要执行的块,从而跳过协议和视图中显示消息的不需要的方法。它应该是
self.layer removeAllAnimations]