TransitionAnimation

1. transitionFromViewController

UIViewController自帶的方法:
transitionFromViewController:toViewController:duration:options:animations:completion:
通常的使用場(chǎng)景是 在多個(gè)Child ViewController之間切換.

AViewController *a = self.childViewControllers[0];
BViewController *b = self.childViewControllers[1];
CViewController *c = self.childViewControllers[2];

// Curl 翻頁(yè)效果
// UIViewAnimationOptionTransitionCurlUp, UIViewAnimationOptionTransitionCurlDown
// Flip 翻轉(zhuǎn)效果
// UIViewAnimationOptionTransitionFlipFromLeft, UIViewAnimationOptionTransitionFlipFromRight
// UIViewAnimationOptionTransitionFlipFromTop, UIViewAnimationOptionTransitionFlipFromDown

[self transitionFromViewController:_currentViewController
                  toViewController:b
                          duration:0.5
                           options:UIViewAnimationOptionTransitionFlipFromRight
                        animations:^{

} completion:^(BOOL finished) {

}];

2. CATransition

CATransition繼承自CALayer, 包含了一些場(chǎng)景的動(dòng)畫(huà)效果. 如Fade,Cube,Ripple,PageCurl,CameraIrilHollow等. 使用如下:

CATransition *animation = [CATransition animation];
animation.duration = 0.5;
animation.timingFunction = UIViewAnimationOptionCurveEaseInOut;
animation.type = kCATransitionFade;

// 在當(dāng)前view上執(zhí)行CATransition動(dòng)畫(huà)
// [self.view.layer addAnimation:animation forKey:@"animation"];

// 在window上執(zhí)行CATransition, 即可在ViewController轉(zhuǎn)場(chǎng)時(shí)執(zhí)行動(dòng)畫(huà)。
[self.view.window.layer addAnimation:animation forKey:@"kTransitionAnimation"];

DemoCATransitionPresentedViewController *presentedVC = [[DemoCATransitionPresentedViewController alloc] init];
[self presentViewController:presentedVC animated:NO completion:nil];
[self.navigationController.view.layer addAnimation:animation forKey:@"kTransitionAnimation"];

DemoCATransitionPushedViewController *pushedVC = [[DemoCATransitionPushedViewController alloc] init];
[self.navigationController pushViewController:pushedVC animated:NO];

3. Transition Animation

自定義動(dòng)畫(huà):轉(zhuǎn)場(chǎng)動(dòng)畫(huà)實(shí)現(xiàn)細(xì)節(jié)須遵守UIViewControllerAnimatedTransitioning協(xié)議,實(shí)現(xiàn)該協(xié)議的對(duì)象中即包含了轉(zhuǎn)場(chǎng)動(dòng)畫(huà)的細(xì)節(jié)實(shí)現(xiàn)代碼

// 轉(zhuǎn)場(chǎng)動(dòng)畫(huà)時(shí)間.
- (NSTimeInterval)transitionDuration:(nullable id <UIViewControllerContextTransitioning>)transitionContext;
// 轉(zhuǎn)場(chǎng)動(dòng)畫(huà)細(xì)節(jié)實(shí)現(xiàn) 該方法中則主要負(fù)責(zé)轉(zhuǎn)場(chǎng)動(dòng)畫(huà)細(xì)節(jié)的實(shí)現(xiàn).
- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext;
//由實(shí)現(xiàn)了本協(xié)議的對(duì)象創(chuàng)建的轉(zhuǎn)場(chǎng)如果是可被中斷的,那么可實(shí)現(xiàn)此方法。
//例如,可返回一個(gè)UIViewPropertyAnimator的實(shí)例。
//此方法被期望返回與轉(zhuǎn)場(chǎng)相同的實(shí)例對(duì)象
- (id <UIViewImplicitlyAnimating>) interruptibleAnimatorForTransition:(id <UIViewControllerContextTransitioning>)transitionContext
//動(dòng)畫(huà)結(jié)束回調(diào)方法
- (void)animationEnded:(BOOL) transitionCompleted
  • present/dismiss 動(dòng)畫(huà)
    ViewControllerTransitionToShowVC *presentedVC = [[ViewControllerTransitionToShowVC alloc] init];
    // 設(shè)置transitioningDelegate, 然后在其中實(shí)現(xiàn)協(xié)議方法即可.
    presentedVC.transitioningDelegate = self;
    [self presentViewController:presentedVC animated:YES completion:nil];

<UIViewControllerTransitioningDelegate>

- (nullable id <UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source;

- (nullable id <UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed;

- (nullable id <UIViewControllerInteractiveTransitioning>)interactionControllerForPresentation:(id <UIViewControllerAnimatedTransitioning>)animator;

- (nullable id <UIViewControllerInteractiveTransitioning>)interactionControllerForDismissal:(id <UIViewControllerAnimatedTransitioning>)animator;

- (nullable UIPresentationController *)presentationControllerForPresentedViewController:(UIViewController *)presented presentingViewController:(nullable UIViewController *)presenting sourceViewController:(UIViewController *)source NS_AVAILABLE_IOS(8_0);
  • push/pop動(dòng)畫(huà)
self.navigationController.delegate = self;
[self.navigationController pushViewController:itemVC animated:YES];

<UINavigationControllerDelegate>主要實(shí)現(xiàn)方法

- (nullable id <UIViewControllerInteractiveTransitioning>)navigationController:(UINavigationController *)navigationController
                          interactionControllerForAnimationController:(id <UIViewControllerAnimatedTransitioning>) animationController NS_AVAILABLE_IOS(7_0);

- (nullable id <UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
                                   animationControllerForOperation:(UINavigationControllerOperation)operation
                                                fromViewController:(UIViewController *)fromVC
                                                  toViewController:(UIViewController *)toVC  NS_AVAILABLE_IOS(7_0);
  • UITabBarController

<UITabBarControllerDelegate>主要實(shí)現(xiàn)方法

- (id <UIViewControllerAnimatedTransitioning>)tabBarController:(UITabBarController *)tabBarController
            animationControllerForTransitionFromViewController:(UIViewController *)fromVC
                                              toViewController:(UIViewController *)toVC;

github Demo


附圖

TransitionAnimation.png


參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容