2016-03-01 52 views
0

我正在學習UIViewController過渡動畫。當我看到UIPercentDrivenInteractiveTransitionupdateInteractiveTransition(_:)方法時,我感到非常困惑。updateInteractiveTransition如何實現?

蘋果的文件說:

這是調用通過對 的updateInteractiveTransition一個方便的方法:上下文對象的方法。

是的,上下文對象確實有updateInteractiveTransition:方法。但UIPercentDrivenInteractiveTransition沒有指向上下文對象的屬性。

因此,如何在updateInteractiveTransition:UIPercentDrivenInteractiveTransition實現又是怎樣UIPercentDrivenInteractiveTransition能夠調用上下文對象的方法,因爲它沒有指針指向一個UIViewControllerContextTransitioning對象?有人有什麼主意嗎?

回答

2

看着它的組裝和通過,

-[UIPercentDrivenInteractiveTransition updateInteractiveTransition:]電話

+[_UIViewControllerTransitionContext _associatedTransitionContextForObject:self]步進拿到transitionContext對象, 其中selfUIPercentDrivenInteractiveTransition實例。

此內部調用objc_getAssociatedObject(interactor, _UIAssociatedTransitionContextKey)

現在,因爲它得到存儲時,它就會被當-[_UIViewControllerTransitionContext _setInteractor:]-[UIViewController presentViewController:animated:completion:]從transitioningDelegate同時接收動畫和交互件調用存儲。

_setInteractor:所做的一件事是objc_setAssociatedObject(interactor, _UIAssociatedTransitionContextKey, ...)