【问题标题】:UIViewControllerAnimatedTransitioning: multiple calls to interruptibleAnimator?UIViewControllerAnimatedTransitioning:多次调用interruptibleAnimator?
【发布时间】:2017-06-29 20:26:05
【问题描述】:

我刚刚花了几个小时追踪一个恰好位于转换驱动程序对象中的错误,interruptibleAnimator 方法被多次调用,其中:

  1. UIViewPropertyAnimator 完成闭包包含对[unowned self] 的引用,以完成由其转换控制器通过self.context.completeTransition(true) 传递的转换上下文
  2. 实现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


    【解决方案1】:

    Apple 在 UIViewControllerAnimatedTransitioning 的“标题文档”中声明:

    /// A conforming object implements this method if the transition it creates can
    /// be interrupted. For example, it could return an instance of a
    /// UIViewPropertyAnimator. It is expected that this method will return the same
    /// instance for the life of a transition.
    @available(iOS 10.0, *)
    optional public func interruptibleAnimator(using transitionContext: UIViewControllerContextTransitioning) -> UIViewImplicitlyAnimating
    

    WWDC Session 2016 的 29:34 分钟也有相同的说明。 27:33 分钟幻灯片上的示例实现似乎具有误导性/错误。

    它被多次调用的原因我不知道。

    【讨论】:

      猜你喜欢
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-19
      • 2013-03-31
      相关资源
      最近更新 更多