1.系統會創建一個轉場相關的上下文對象,傳遞到動畫執行器的animateTransition:和transitionDuration:方法,同樣,也會傳遞到交互Controller的startInteractiveTransition:方法。如果交互Controller的startInteractiveTransition:首先被調用了,那么交互Controller對象應該在需要的時候,手動的調用animateTransition:方法。非交互Controller而是執行普通的Controller的過渡轉場動畫時,系統將自動調用動畫執行器的animateTransition:方法。
系統會查詢視圖控制器的transitioningDelegate或導航控制器的delegate代理來決定動畫執行器或交互Controller是否應該被應用一個過渡轉場效果,transitioningDelegate是UIViewController的新屬性,該屬性是實現了UIViewControllerTransitioningDelegate協議的對象,導航控制器同樣的增加了一些新的委托方法。
UIViewControllerContextTransitioning協議可以被容器Controller接收采用,它是被設計用來實現比系統目前支持的更多復雜的轉場效果。目前,導航控制器的push/pops行為和視圖控制器的present/dismiss轉場效果可以被自定義。轉場相關的信息與這些方法相關聯綁定着,viewControllerForKey:,initialFrameForViewController:和finalFrameForViewController:方法。系統提供兩個Key用來辨識導航控制器執行push/pop和視圖控制器執行present/dismiss轉場時對應的from視圖控制器和to視圖控制器。
所有自定義的動畫必須在轉場程序完成時調用上下文對象的completeTransition:方法。此外,動畫應該在上下文中指定的containerView中發生。對於交互轉場動畫,上下文對象的updateInteractiveTransition:,finishInteractiveTransition和cancelInteractiveTransition:方法應該在交互動畫過程中被調用。UIPercentDrivenInteractiveTransition類提供了對UIViewControllerInteractiveTransitioning協議的實現,該類可以被用來交互性驅動任何由動畫執行器創建的UIView屬性動畫。
2.【協議】UIViewControllerContextTransitioning
2.1 【屬性】containerView: UIView 發生轉場動畫所在的視圖,允許在自定義轉場時往該視圖添加或者移除子視圖。
2.2 【屬性】animated: Bool 大多數時候這個值是YES/true。對於使用了新的呈現類型UIModalPresentationCustom的自定義轉場過渡,即使轉場過渡沒有以動畫的形式進行,系統也將調用animateTransition:方法。
2.3 【屬性】interactive: Bool 指示轉場是否處於交互狀態
2.4 【屬性】transitionWasCancelled: Bool 指示轉場是否被取消
2.5 【屬性】presentationStyle: UIModalPresentationStyle
符合UIViewControllerInteractiveTransitioning協議的可交互Controller(由容器型視圖控制器的代理聲明持有,或就present呈現方式來說,由transitioningDelegate聲明持有)應該在轉場交互被忽略(scrubbed),然后要么被取消,要么完成轉場時調用下面這些方法。注意一下,如果動畫執行器是可被中斷的,然后調用finishInteractiveTransition:和cancelInteractiveTransition:來標識此次轉場未被中斷,將自然的完成或者被取消掉。
2.6 【方法】updateInteractiveTransition(percentComplete: CGFloat)
2.7 【方法】finishInteractiveTransition
2.8 【方法】cancelInteractiveTransition
2.9 【方法】pauseInteractiveTransition 當轉場過程被中斷且需要被暫停時調用此方法
2.10 【方法】completeTransition(didComplete: Bool) 無論轉場在什么時候完成或是被取消,此方法都必須被調用。通常此方法由符合UIViewControllerAnimatedTransitioning協議的轉場代理對象調用。純交互式轉場過渡此方法應該在交互Controller中調用。此方法在轉場結束時有效地更新內部視圖控制器的狀態。
2.11 【方法】viewControllerForKey(key: UITransitionContextViewControllerKey) 系統當前只定義了兩個Key - UITransitionContextToViewControllerKey 和 UITransitionContextFromViewControllerKey。動畫執行器不應直接操作一個視圖控制器相關聯的視圖,應該使用viewForKey:來獲取。
2.12 【方法】viewForKey(key: UITransitionContextViewKey) 系統當前只定義了兩個Key - UITransitionContextFromViewKey 和 UITransitionContextToViewKey。此方法可能返回nil,代表動畫執行器不應操作相關聯的視圖控制器的視圖。
2.13 【屬性】targetTransform
2.14 【方法】initialFrameForViewController(vc: UIViewController)、finalFrameForViewController(vc: UIViewController) 當frame無法得知或者未定義時將被設置為CGRectZero。例如,當且僅當fromView在轉場結束時將從窗口中移除時,fromViewController的finalFrame將為CGRectZero。另一方面,如果finalFrame不為CGRectZero,那么它必須在轉場結束時被認真處理。
3.【協議】UIViewControllerAnimatedTransitioning
3.1 【方法】transitionDuration(transitionContext: UIViewControllerContextTransitioning) 百分比驅動交互式轉場中被使用,此外也應用於包含有需要與主動畫同步的輔助動畫的容器Controllers。?
3.2 【方法】animateTransition(transitionContext: UIViewControllerContextTransitioning) 如果轉場是交互式但不是百分比驅動式交互轉場時,此方法只能是非公開的。?
【可選方法】
3.3 【方法】interruptibleAnimatorForTransition(transitionContext: UIViewControllerContextTransitioning) 由實現了本協議的對象創建的轉場如果是可被中斷的,那么可實現此方法。例如,可返回一個UIViewPropertyAnimator的實例。此方法被期望返回與轉場相同的實例對象。?
3.4 【方法】ainmationEnded(transitionCompleted: Bool) 當轉場結束時,系統會回調此方法。可將此方法當做是轉場結束的一個監聽方法,處理一些善后事宜。O(∩_∩)O
4.【協議】UIViewControllerInteractiveTransitioning
4.1 【方法】startInteractiveTransition(transitionContext: UIViewControllerContextTransitioning)
【可選方法】
4.2 【屬性】completionSpeed:CGFloat
4.3 【屬性】completionCurve:UIViewAnimationCurve
4.4 【屬性】wantsInteractiveStart 在10.0中,如果一個實現了UIViewControllerAnimatedTransitioning協議的對象被知道是可中斷的,可能的去啟動它,就好像它是不可交互的,然后中斷轉場並開始與其交互。這種情況下,實現此方法並返回NO/false。如果未實現則返回默認YES/true。
5.【協議】UIViewControllerTransitioningDelegate
【可選方法】
5.1 【方法】animationControllerForPresentedController(presented: UIViewController, presenting: UIViewController, source: UIViewControlelr)
5.2 【方法】animationControllerForDismissedController(dismissed: UIViewController)
5.3 【方法】interactionControllerForPresentation(animator: UIViewControllerAnimatedTransitioning)
5.4 【方法】interactionControlelrForDismissal(animator: UIViewControllerAnimatedTransitioning)
5.5 【方法】presentationControllerForPresentedViewController(presented: UIViewController, presenting: UIViewController, source: UIViewController)
6.【類】UIPercentDrivenInteractiveTransition 百分比驅動交互式轉場過渡類
6.1 【屬性】duration: CGFloat 非交互時間,此時間在轉場開始時,執行器的transitionDuration:方法被調用時返回。
6.2 【屬性】percentComplete: CGFloat 最后的值由updateInteractiveTransition:指定
6.3 【屬性】completionSpeed: CGFloat 默認為1,與轉場過渡完成時間((1 - percentComplete) * duration)相對應。必須大於0.0。實際完成的時間與completionSpeed成反比。在cancelInteractiveTransition或finishInteractiveTransition調用之前都可以設置該值,以加速或者減慢整個轉場的非交互部分。
6.4 【屬性】completionCurve: UIViewAnimationCurve 當交互部分的轉場完畢時,此屬性可以被設置來標識一個不同的動畫曲線。默認是UIViewAnimationCurveEaseInOut。注意,在交互期間的動畫時間曲線是Linear直線型。
6.5 【屬性】timingCurve: UITimingCurveProvider 對於可中斷的動畫執行器,在轉場被中斷后繼續進行時可指定一個不同的時間曲線提供者。如果動畫執行器不可中斷,則此屬性被忽略。
6.6 【屬性】wantsInteractiveStart: Bool 上面有解釋。
6.7 【方法】pauseInteractiveTransition 此方法可暫停一個正在進行中可被中斷的動畫執行器。這可以確保當轉場進入或者退出交互模式時,所有由notifyWhenInteractionChangesUsingBlock:方法設置的blocks被執行。
6.8 【方法】updateInteractiveTransition(percentComplete: CGFloat)、cancelInteractiveTransition、finishInteractiveTransition。