我正在学习UIViewController
过渡动画。当我阅读UIPercentDrivenInteractiveTransition
的updateInteractiveTransition(_:)
方法时,我感到非常困惑。
苹果文档说:
这是一种方便的方法,可以调用 更新交互式转换:上下文对象的方法。
是的,上下文对象确实有一个updateInteractiveTransition:
方法。但是UIPercentDrivenInteractiveTransition
没有指向上下文对象的属性。
那么updateInteractiveTransition:
如何在UIPercentDrivenInteractiveTransition
中实现,UIPercentDrivenInteractiveTransition
如何能够调用上下文对象的方法,因为它没有指向UIViewControllerContextTransitioning
对象的指针?有人知道吗?
查看其程序集并逐步完成,
-[UIPercentDrivenInteractiveTransition updateInteractiveTransition:]
呼叫
+[_UIViewControllerTransitionContext _associatedTransitionContextForObject:self]
获取transitionContext
对象,其中self
是UIPercentDrivenInteractiveTransition
的实例。
这在内部调用objc_getAssociatedObject(interactor, _UIAssociatedTransitionContextKey)
。
现在,至于它何时被存储,当-[_UIViewControllerTransitionContext _setInteractor:]
被-[UIViewController presentViewController:animated:completion:]
调用时被存储,从转换委托接收动画器和交互器。
_setInteractor:
做的一件事就是objc_setAssociatedObject(interactor, _UIAssociatedTransitionContextKey, ...)
.