- (void)addAnimation:(CAAnimation *)anim forKey:(nullable NSString *)key; 方法浅析

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

 

将viewdidload里面的代码所有注释掉less

 

- (void)viewDidLoad {函数

    [superviewDidLoad];动画

}this

 

 

重写点击交换的事件方法url

 

//交换视图.net

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

}

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

相关文章
相关标签/搜索