【发布时间】: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