1

我不太喜欢 iOS 动画。我想要实现的是一个简单的消息视图,它从屏幕底部垂直滑动到给定的 y,然后在几分钟后 UIView 垂直回滚以离开屏幕。

[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 应用程序中使用此机制时遇到问题:当我更改选项卡时,动画停止,我实际上可以看到“完成”完成是“假”。因此不调用第二个块,并且消息视图保持打开。

以下是问题:

  • 我首先关心的是了解我编写的代码是否正确,关于嵌套动画。
  • 我可以通过忽略“完成”并执行代码来解决,但我觉得这不是一个好主意
  • 在最后一个完成块中,我放置了一些编程逻辑,基本上我正在恢复一些 UIButtons 状态,以及其他一些小的 UI 更改。此时不知道是不是好主意,好像不是,但是怎么能让UI知道消息视图已经消失了。当涉及到快速响应的 UI 更改时,NSNotification 和 KVO 似乎是个坏主意。
4

1 回答 1

-3

You can stop all animations for a layer by sending the layer a removeAllAnimations message.

[sel.view removeAllAnimations];
于 2013-04-24T08:42:05.607 回答