zoukankan      html  css  js  c++  java
  • - (void)addAnimation:(CAAnimation *)anim forKey:(nullable NSString *)key; 方法浅析

    转载自:http://blog.csdn.net/ronaldo_carry/article/details/49070119

    将viewdidload里面的代码全部注释掉

    - (void)viewDidLoad {

        [superviewDidLoad];

    }

    重写点击交换的事件方法

    //交换视图

    - (IBAction)changeBtn {

        //通过类方法来创建转场动画

        CATransition *transition = [CATransitionanimation];

        transition.duration = 1.0f;//动画的间隔为1S

        //设置动画的变化方法

        transition.timingFunction = [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];

        //下面是交换视图特有的属性

        //私有API 使用私有API的时候要慎重(这个是苹果官网承认的)

        transition.type = @"pageCurl";

    //    transition.type =@"fade";fade渐隐

        //type的子类型 转换的方向

        transition.subtype =  @"fromRight";

    //    //这里也可以写成这样 效果是一样的

    //    transition.subtype = kCATransitionFromRight;

        //设置具体的动画 交换两个视图的位置

        [_aninmationViewexchangeSubviewAtIndex:0withSubviewAtIndex:1];

        //给图层添加动画

        [_aninmationView.layeraddAnimation:transitionforKey:@"myAnimation"];

    }

     

    这样运行出来的效果是  点击了交换按钮  出来动画翻页效果  但是始终展现的是最上面的view 并不会实现预期的交换两个view的效果

    查看了一下这个函数的官方文档

    - (void)addAnimation:(CAAnimation *)anim forKey:(nullableNSString *)key;

    我们可以看到文档中是这么解释的:

    /** Animation methods. **/

    /* Attach an animation object to the layer. Typically this is implicitly

     * invoked through an action that is an CAAnimation object.

     *

     * 'key' may be any string such that only one animation per unique key

     * is added per layer. The special key 'transition' is automatically

     * used for transition animations. The nil pointer is also a valid key.

     *

     * If the `duration' property of the animation is zero or negative it

     * is given the default duration, either the value of the

     * `animationDuration' transaction property or .25 seconds otherwise.

     *

     * The animation is copied before being added to the layer, so any

     * subsequent modifications to `anim' will have no affect unless it is

     * added to another layer. */

     

    翻译过来就是:

    /** Animation methods. **/  动画方法

    /* 给图层(layer)附加上一个动画对象  通常这是隐式的通过一个动作,这个动作是一个CAAnimation对象来调用.

     * 'key'键可能是任意的string,这样每个唯一的键只有一个动画(animation)被添加到图层(layer)中.特殊的键'transition'会被自动用于转场动画中,空指针同样也是一个空的键值.

     *如果动画的持续时间(duration)属性是0或者负,则给定默认时间,或者是转换属性`animationDuration'的值,否则的话0.25S.

     * 动画(animation)被添加到图层(layer)之前已经被复制(copied),所以任何后续对'anim'动画修改都不会有影响,除非它被添加到另一个图层(layer)中   /*这句话有点郁闷 没怎么理解他说的意思*/

     **/

    组动画:

    -(void)animationGroup{

    CAAnimationGroup *animG = [CAAnimationGroup animation];

    //2.添加动画到动画数组animation groups中

        animG.animations  = @[anim1,anim2];

     //4.添加动画到图层上

        [self.navigationController.view.layer addAnimation:animG forKey:@"animG"];

    }

    然后就会依次执行组动画里的动画了

  • 相关阅读:
    IO多路复用--epoll(待学习)
    网络信息检索
    TCP协议的客户端与服务器的通信过程
    UDP网络编程
    HDU_oj_2017 字符串统计
    HDU_oj_2016 数据的交换输出
    HDU_oj_2015 偶数求和
    HDU_oj_2014 评委会打分
    HDU_oj_2013 蟠桃记
    HDU_oj_2012 素数判定
  • 原文地址:https://www.cnblogs.com/Jenaral/p/5308742.html
Copyright © 2011-2022 走看看