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