iOS 8.3 - 交互式转场忽略了UIView动画完成块?

19
自从我将设备更新到iOS 8.3以来,我就无法完成交互式转换。
当我调用cancelInteractiveTransition()finishInteractiveTransition()时,似乎在动画的completion块中,包含了以下这行代码:
transitionContext.completeTransition(!transitionContext.transitionWasCancelled())

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

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

这是iOS 8.3中的一个错误(因为此问题仅在8.3之后发生),还是我的操作有误?


我遇到了这个确切的问题。我通过实证发现,只有当用户进行非常快速的平移手势时,才会出现此问题。如果是缓慢的手势,则完成块被调用。我还发现,一旦完成块被调用,它在未来的手势中永远不会再次被调用(无论是缓慢还是快速)。然而,实际的动画块每次都能正常调用。 - JVillella
当应用程序停止响应触摸事件时,您是否检查了处理器利用率?可能是在主线程上执行了无限循环。 - jkr
在诊断这个问题时,我注意到手势的更改和结束状态事件发生在animateTransition之前。不知何故,animateTransition比预期晚发生。因此,动画甚至在开始之前就被取消/完成了!当我使用一些笨拙的GCD技巧来确保UIPercentDrivenInteractionTransition.Changed.Ended更新直到调用animationDuration后才发生,看起来没问题。 - Rob
感谢@Rob提供的解决方法。最终我没有采用交互式部分。似乎有人已经向苹果报告了这个错误。请为rdar://21961293提交一个重复报告。请参见http://www.openradar.me/21961293。 - vincent_pun
1个回答

2
尝试重写animationDidStop方法并从其中调用它。
  override func animationDidStop(anim: CAAnimation!, finished flag: Bool) {
    self.transitionContext?.completeTransition(!self.transitionContext!.transitionWasCancelled())
  }

我希望能对您有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接