【发布时间】:2017-06-29 20:26:05
【问题描述】:
我刚刚花了几个小时追踪一个恰好位于转换驱动程序对象中的错误,interruptibleAnimator 方法被多次调用,其中:
-
UIViewPropertyAnimator完成闭包包含对[unowned self]的引用,以完成由其转换控制器通过self.context.completeTransition(true)传递的转换上下文 -
实现
UIViewControllerAnimatedTransitioning并且是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 提供的 here in their WWDC 2016 talk;如果您下载、放置断点并启动他们的 Photo Transitioning 应用程序,您可以自己看到在他们的情况下,该方法被调用两次以实现相同的转换。
有人能告诉我我是在追鬼还是这是一种合法的怪异行为?
【问题讨论】:
标签: ios swift uiviewcontroller uiviewpropertyanimator