CoreAnimation的使用小结

参考:切记动画的执行,是必须要按你想点击后操作开始执行的,如果是想push,那么就在其前做好动画,如果是要点击事件执行动画,就要在点击事件中添加要达到的效果。执行动画,就是将要修改的属性封装到动画中去执行CAAnimation是根据CALayer进行处理操作的;当[layer addAnimation:anim forKey:@“”]; 执行后,动画就开始执行了,所以要在其中添加将要达到的效果即可。对于 基本动画,如果是结构体需要使用NSValue进行转换,但如果不是就可以直接使用,,记得要转成id类型,可使用 @(); 这种方式来转换。所有的CAAnimation对象实现这个CAAction协议,并且当一个图层属性发生改变时,这个动画便会执行。动画属性是动作的一种类型,你可以用几乎所有你想用的动作类型去定义一个动作。然后你需要去定义一个动作对象,然后将其与你的app图层连接起来。核心动画都是针对图层来说的,Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程。要注意的是, Core Animation是直接作用在CALayer上的,并非UIView。Core Animation的使用步骤:1. 使用它需要先添加QuartzCore.framework框架和引入主头文件<QuartzCore/QuartzCore.h>(iOS7不需要)2. 初始化一个CAAnimation对象,并设置一些动画相关属性,添加图层想要达到的动画后的结果3. 通过调用CALayer的addAnimation:forKey:方法增加CAAnimation对象到CALayer中,这样就能开始执行动画了(此方法进行动画的触发)4. 通过调用CALayer的removeAnimationForKey:方法可以停止CALayer中的动画CATransitiontype的常见量值:

/* 过渡效果

fade //交叉淡化过渡(不支持过渡方向) kCATransitionFade

push //新视图把旧视图推出去 kCATransitionPush

moveIn //新视图移到旧视图上面 kCATransitionMoveIn

reveal //将旧视图移开,显示下面的新视图 kCATransitionReveal

cube //立方体翻滚效果

oglFlip //上下左右翻转效果

suckEffect //收缩效果,如一块布被抽走(不支持过渡方向)

rippleEffect //滴水效果(不支持过渡方向)

pageCurl //向上翻页效果

pageUnCurl //向下翻页效果

cameraIrisHollowOpen //相机镜头打开效果(不支持过渡方向)

cameraIrisHollowClose //相机镜头关上效果(不支持过渡方向)

*/

/*

subtype过渡方向

kCATransitionFromRight

kCATransitionFromLeft

kCATransitionFromBottom

kCATransitionFromTop

*/CATransition的使用CATransition *anim = [CATransition animation];anim.type = @“cube”; // 动画过渡类型anim.subtype = kCATransitionFromTop; // 动画过渡方向anim.duration = 1; // 动画持续1s// 代理,动画执行完毕后会调用delegate的animationDidStop:finished:anim.delegate = self;/*******中间穿插改变layer属性的代码**********/ #重要不可错位 [layer addAnimation:anim forKey:nil];CAAnimation是所有动画类的父亲,但是它不能直接使用,应该使用其子类。常见的子类有:CAMediaTiming(一个协议不能直接使用)CAAnimation:CAPropertyAnimation:(不能直接使用,使用其子类)CABasicAnimation(可以)CAKeyframeAnimation(可以)CATransition(可以)CAAnimationGroup(可以)(同一颜色代表同一层级)说明:1 > 能用的动画类只有4个子类:CABasicAnimation、CAKeyframeAnimation、CATransition、CAAnimationGroup 2 > CAMediaTiming是一个协议(protocol)CAPropertyAnimation是CAAnimation的子类,但是不能直接使用,要想创建动画对象,应该使用它的两个子类:CABasicAnimation和CAKeyframeAnimation它有个NSString类型的keyPath属性, 可通过指定CALayer的某个属性名为keyPath,并对比CALayer的这个属性的值进行修改,达到相应的动画效果。比如:指定@“position”为keyPath,就是修改CALayer的position属性的值,以达到平移的动画效果常见的属性有:duration:动画的持续时间repeatCount:动画的重复次数timingFunction:控制动画运行的节奏补充:所有动画对象的父类,负责控制动画的持续时间和速度,是个抽象类,不能直接使用,应该使用它的具体子类:属性解析:(有>代表来自CAMediaTiming协议的属性)

> duration:动画的持续时间

> repeatCount:动画的重复次数

> repeatDuration:动画的重复时间

removedOnCompletion:默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode为kCAFillModeForwards

> fillMode:决定当前对象在非active时间段的行为。比如动画开始之前,动画结束之后。

> beginTime:可以用来设置动画延迟执行时间,若想延迟2s,就设置为CACurrentMediaTime() + 2, CACurrentMediaTime()为图层当前的时间。我无所事事的度过了今天,是昨天死去的人们所期望的明天。

CoreAnimation的使用小结

相关文章:

你感兴趣的文章:

标签云: