【问题标题】:iOS 8.3 - Interactive Transitions Ignores UIView Animation Completion Block?iOS 8.3 - 交互式过渡忽略 UIView 动画完成块?
【发布时间】:2015-04-24 08:20:59
【问题描述】:

自从我将设备更新到 iOS 8.3 后,我一直无法完成交互式转换。

似乎当我调用cancelInteractiveTransition()finishInteractiveTransition() 时,动画师的completion 块中的completion 块包含以下行:

transitionContext.completeTransition(!transitionContext.transitionWasCancelled())

大部分时间根本不调用。这会导致整个应用程序停止对触摸和旋转事件做出反应。

我正在使用UIPercentDrivenInteractiveTransition 的子类。 cancelInteractiveTransition()finishInteractiveTransition() 在其平移手势识别器处于状态 .Ended.Cancelled 时被调用。

这是 iOS 8.3 中的错误(因为这个问题只在 8.3 之后发生在我身上),还是我做错了?

【问题讨论】:

  • 我遇到了这个确切的问题。我根据经验发现的一点进一步信息是,只有当用户执行非常快速的平移手势时才会出现此问题。如果它很慢,完成块确实被调用。我还发现,一旦完成块没有被调用,它就再也不会在未来的手势上被调用(无论慢还是快)。然而,实际的动画块每次都会被调用。
  • 当应用停止对触摸事件做出反应时,您是否检查过处理器利用率?可能是在主线程上执行了一个无限循环。
  • 当我诊断这个问题时,我注意到手势的变化和结束状态事件发生在animateTransition 甚至运行之前。不知何故,animateTransition 发生的时间比人们想象的要晚。所以动画在它开始之前就被取消/完成了!当我使用一些kludgy GCD sleight of hand 来确保UIPercentDrivenInteractionTransition.Ended 更新直到animationDuration 被调用之后才发生,看起来没问题。
  • 感谢@Rob 的解决方法。我最终在没有互动部分的情况下安顿下来。似乎有人向 Apple 报告了此错误。请为 rdar://21961293 提交 dup。见openradar.me/21961293

标签: ios swift uiview


【解决方案1】:

尝试覆盖 animationDidStop 并从那里调用它

  override func animationDidStop(anim: CAAnimation!, finished flag: Bool) {
    self.transitionContext?.completeTransition(!self.transitionContext!.transitionWasCancelled())
  }

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 2013-10-23
    • 2016-12-27
    相关资源
    最近更新 更多