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

}

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

上一篇:linux 系统 tar 的用法详解


下一篇:VMware虚拟机配置静态ip