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