【问题标题】:UIView animation delaysUIView 动画延迟
【发布时间】:2011-06-13 00:54:01
【问题描述】:

我注意到使用 UIView 类方法的 UIView 动画似乎或多或少地将程序置于“暂停”状态,直到它们完成。

有没有办法让动画开始,例如,持续 3 秒,在动画期间,程序的其他方面仍在运行,接受触摸事件等?

【问题讨论】:

  • 其他方面可以在另一个线程(默认 UI 线程除外)上运行,但我需要查看您的代码才能提出其他建议。
  • 动画期间线程和运行循环都不会被阻塞,只需触摸事件即可。 (并且仅在默认情况下)
  • 啊,好的。这可能就是我所看到的。所以你根本无法在动画期间接收触摸事件?如果一个小的 UIView 在几秒钟内进行 alpha 淡入淡出,程序将不会接受屏幕上其他任何地方的触摸事件,按设计?
  • 如果您设置我在下面的答案中提到的选项,您可以。如果动画阻塞了整个屏幕或只是动画视图,我不记得我的头顶,但无论哪种方式我都不会感到惊讶。

标签: iphone ipad uiview


【解决方案1】:

是的,UIKit 默认会在动画期间阻止交互。要覆盖,请设置UIViewAnimationOptionAllowUserInteraction:

[UIView animateWithDuration:0.3 delay:0.0
                    options:UIViewAnimationOptionAllowUserInteraction
                 animations:^
 {
     // ...
 } completion:NULL];

【讨论】:

    【解决方案2】:

    UIKit 不是线程安全的,因此所有此类动画都必须发生在主线程上 - 而不是后台线程上。引用 Apple 文档:

    线程

    注意事项操作 到您的应用程序的用户界面 必须发生在主线程上。因此, 你应该总是调用 运行在代码中的 UIView 类 应用程序的主线程。 唯一一次这可能不严格 必要的是在创建视图时 对象本身;但所有其他 操作应发生在主要 线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      相关资源
      最近更新 更多