一個3D翻轉的轉場動畫:KYPushTransition

mip33 9年前發布 | 16K 次閱讀 Objective-C開發 KYPushTransition

一個3D翻轉的轉場動畫,可以手勢百分比控制。

Usage

以下代碼全在第一個視圖控制器中實現:

進入第一個控制器。在跳轉之前,設置后一個控制器的代理,比如我用Segue的話,就在-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender里設置后一個控制器的代理為前一個控制器,并且讓后一個控制器實現手勢返回的交互:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

    SecondViewController *secVC = (SecondViewController *)segue.destinationViewController;
    secVC.transitioningDelegate = self;
    popInteractive = [KYPopInteractiveTransition new];
    [popInteractive addPopGesture:secVC];
}

然后分兩種情況:

1)如果只是一個VC present 到另一個 VC,那么你需要實現UIViewControllerTransitioningDelegate中的兩個協議,分別對應present和dismiss,返回對應的動畫:

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

    KYPushTransition *flip = [KYPushTransition new];

    return flip;
}

- (id <UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed{
    KYPopTransition *flip = [KYPopTransition new];
    return flip;

}

然后是手勢交互的方法,比較常用的情況是返回上一個VC采用手勢,所以這里只實現了dismiss的方法:

- (id <UIViewControllerInteractiveTransitioning>)interactionControllerForDismissal:(id <UIViewControllerAnimatedTransitioning>)animator{
    return popInteractive.interacting ? popInteractive : nil;

}

2)如果你是用UINavigationController控制兩個VC,那么需要實現UINavigationControllerDelegate中的:

- (id <UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
                                   animationControllerForOperation:(UINavigationControllerOperation)operation
                                                fromViewController:(UIViewController *)fromVC
                                                  toViewController:(UIViewController *)toVC{
    if (operation == UINavigationControllerOperationPush) {

        KYPushTransition *flip = [KYPushTransition new];
        return flip;

    }else if (operation == UINavigationControllerOperationPop){

        KYPopTransition *flip = [KYPopTransition new];
        return flip;

    }else{
        return nil;
    }
}

UINaviagtionController控制VC的情況下,UINavigationControllerDelegate也有相應的手勢交互的協議方法:

- (id <UIViewControllerInteractiveTransitioning>)navigationController:(UINavigationController *)navigationController
                          interactionControllerForAnimationController:(id <UIViewControllerAnimatedTransitioning>) animationController{
        return popInteractive.interacting ? popInteractive : nil;

項目主頁:http://www.baiduhome.net/lib/view/home/1429510711666

 本文由用戶 mip33 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!