iOS 自定义动画 push/pop动画

来源:互联网 发布:网络视听年度人物 编辑:程序博客网 时间:2024/05/16 04:58
<span style="font-weight: bold; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="font-size:14px;">自定义push,pop动画</span></span>
<span style="font-weight: bold; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="font-size:14px;"></span></span>
<span style="font-weight: bold; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="font-size:14px;">一,将pop,push的animated置为no,将导航控制器view的显现方式加上动画:(相当于自定义动画区覆盖转场动画)</span></span>
<span style="font-weight: bold; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="font-size:14px;"></span></span>
1,CATransition *transition = [CATransition animation];//定义一个动画对象
2,transition.duration = 1.0f;//间隔时间
3,transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];//动画的开始与结束的快慢
 4, transition.type = kCATransitionFade;//动画效果
 5,transition.subtype = KCATransitionFromRight;//动画方向;
6,[navigationController.view.layer addAnimation:transtion forKey :nil];//在需要添加动画的view层上添加此代码


7, setType 的属性有:
1,KCATransitionFade  淡出
2,  KCATransitionMoveIn 覆盖原图
3,KCATransitionPush 推出
4,KCATransitionReveal 底部显出来
8,用字符串设置动画类型
       1,pageCurl 向上翻一页
       2,pageUnCurl 向下翻一页
3, rippleEffect 滴水效果
4,suckEffect 收缩效果,如一块布被抽走
5,cube 立方体效果
6,oglFlip 上下翻转效果
二,执行io7推出的代理方法,自定义转场动画

1,新建一个类继承于NSObject,命名为pushHelper用于push动画,pophelper用于pop动画
 使它遵守<UIViewControllerAnimatedTransitioning>
2,  实现该协议的两个方法
    1)-  (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext
<strong><span style="font-size:18px;">{    return 0.3;}//返回的是动画的持续时间,一般是0.2到0.4</span></strong>
<pre code_snippet_id="464571" snippet_file_name="blog_20140905_1_8919567" name="code" class="objc" style="line-height: 24px;"><strong><span style="font-size:18px;">2)这是动画转场的主要方法</span></strong>
<strong><span style="font-size:18px;">- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext{    // 获取到目的控制器    UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];    // 获取源控制器    UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];    // [transitionContext containerView] 是转场容器,如果不把目的控制器的view添加进去,那么动画执行完成之后,toviewcontroller的view就会消失,因为动画就是在这个容器里面完成的,完成之后没有view自然什么都没有了,需要添加,这样便于理解,    [[transitionContext containerView] addSubview:toViewController.view];    toViewController.view.alpha = 0.0;</span></strong>
<strong><span style="font-size:18px;">//开始动画    [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{        // 动画效果有很多,这里就展示个左偏移        fromViewController.view.transform = CGAffineTransformMakeTranslation(-320, 0);        toViewController.view.alpha = 1.0;    } completion:^(BOOL finished) {        // 声明过渡结束-->记住,一定别忘了在过渡结束时调用 completeTransition: 告诉系统已经编译完成        [transitionContext completeTransition:![transitionContext transitionWasCancelled]];    }];}</span></strong>
<strong><span style="font-size:18px;">3,实现动画</span></strong>
<strong><span style="font-size:18px;">1,你的fromviewController同样需要遵守<UINavigationControllerDelegate></span></strong>
<pre code_snippet_id="464571" snippet_file_name="blog_20140905_2_4764702" name="code" style="line-height: 16px;"><strong><span style="font-size:18px;">- (id<UIViewControllerAnimatedTransitioning>) navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC{    /**     *  typedef NS_ENUM(NSInteger, UINavigationControllerOperation) {//     *     UINavigationControllerOperationNone,     *     UINavigationControllerOperationPush,     *     UINavigationControllerOperationPop,     *  };     */这里的operation可以判断当前的动作是push还是pop    if (operation == UINavigationControllerOperationPush) {</span></strong>
<strong><span style="font-size:18px;">(这里返回有遵守了动画协议并在里面编写的动画的类对象)         return pushhelper;    }else{        return pophelper;    }}</span></strong>

<span style="font-size:14px;"></span>
0 0