美文网首页iOS DeveloperiOS开发
UIViewController转场动画基础用法-push篇

UIViewController转场动画基础用法-push篇

作者: 囧书 | 来源:发表于2016-10-09 14:34 被阅读555次

    本文参考自iOS动画指南 - 6.可以很酷的转场动画
    原文是用swift写的代码,这里转换成oc代码实现。还有一些细节上不一样的地方,不尽相同。

    要自定义push动画,需实现导航控制器的代理协议<UINavigationControllerDelegate>

    @interface ViewController () <UINavigationControllerDelegate>
    
    ...
    self.navigationController.delegate = self;
    ...
    
    // 返回一个不可交互的转场动画
    - (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC {
         return ...;
    }
    
    // 返回一个可以交互的转场动画
    - (id<UIViewControllerInteractiveTransitioning>)navigationController:(UINavigationController *)navigationController interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransitioning>)animationController {
         return ...;
    }
    

    然后只要执行这句:
    [self.navigationController pushViewController:vc animated:YES];
    导航控制器就会调用上述协议方法获取动画来执行。

    对于不需要交互式过程、只是自动完成的动画,那么创建一个实现了<UIViewControllerAnimatedTransitioning>协议的对象返回给导航控制器就ok。

    - (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext {
        // 返回动画持续时间;
        return 0.4;
    }
    
    - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
        // 编写动画逻辑
    }
    

    而对于可交互式动画,则需要让上述的不可交互动画类继承自UIPercentDrivenInteractiveTransition,它可以按照progress(动画进度)来分解动画,只需要我们把交互的进度告诉它,它就可以只显示动画过程对应的那一瞬间。

    [self updateInteractiveTransition:progress];
    

    我们不断更新progress,它就可以不断更新动画过程进度。
    当然,也可以在解发到某个逻辑时让它取消

    self.completionSpeed = -1.0;
    [self cancelInteractiveTransition];
    

    或者让它立即完成余下的动画

    self.completionSpeed = 1.0;
    [self finishInteractiveTransition];
    
    TransitioningAnimationDemo2.gifTransitioningAnimationDemo2.gif

    源码:https://github.com/JiongXing/TranstioningAnimationDemo2
    下载

    相关文章

      网友评论

        本文标题:UIViewController转场动画基础用法-push篇

        本文链接:https://www.haomeiwen.com/subject/ndwpyttx.html