我刚刚花了几个小时追踪一个恰好位于转换驱动程序对象中的错误,该interruptibleAnimator
方法被多次调用,其中:
UIViewPropertyAnimator
完成闭包包含对[unowned self]
完成其转换控制器传递的转换上下文的引用self.context.completeTransition(true)
实现
UIViewControllerAnimatedTransitioning
并且是 a的转换控制器UINavigationControllerDelegate
通过其animate
方法传递上下文extension NavigationTransitionController: UIViewControllerAnimatedTransitioning { func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { return transitionDuration } func animationEnded(_ transitionCompleted: Bool) { // Clean up our helper object and any additional state transitionDriver = nil } func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { transitionDriver = TransitionDriver(context: transitionContext, duration: transitionDuration) interruptibleAnimator(using: transitionContext).startAnimation() } func interruptibleAnimator(using transitionContext: UIViewControllerContextTransitioning) -> UIViewImplicitlyAnimating { return transitionDriver!.transitionAnimator }
除非我在这里遗漏了一些非常基本的东西,否则我不知道为什么转换控制器会多次调用该interruptibleAnimator
方法。
我的结构受到 Apple在 WWDC 2016 演讲中介绍的内容的启发;如果您下载,放置一个断点并启动他们的 Photo Transitioning 应用程序,您可以自己看到在他们的情况下,该方法被调用两次以实现相同的转换。
有人可以告诉我我是在追鬼还是这是一种合法的奇怪行为?