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"];

    }

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

  • 相关阅读:
    Could't creat any visual c# project in visual studio 2008 beta 2
    最近有点时间赶紧学习,好久没有写东西了
    三亚 渡假 不多, 以后要多去去 芒果很好吃
    windows8. 微软要颠覆PC传统模式
    IM
    windows8 预览版本 安装 VC6 + sp6
    windows 8 截图部分
    分享一个常识 如果你也和VC 打交道
    有时间看看, 热爱技术,不沉迷于技术
    LIVE555 Media Server
  • 原文地址:https://www.cnblogs.com/Jenaral/p/5308742.html
Copyright © 2011-2022 走看看