CAAnimation

CAAnimation的继承关系如下图所示:

CAAnimation_第1张图片

注意 :上图中的黑色虚线代表”继承”某个类,红色虚线代表“遵守”某个协议


CAAnimation相关属性:

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

动画代理delegate:

- (void)animationDidStart:(CAAnimation *)anim;
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;

CAMediaTiming协议的属性

  • repeatCount:动画的重复次数
  • repeatDuration:动画的重复时间
  • duration:动画的持续时间
  • speed:其实也比较好理解,如果一个动画A :duration为1秒,speed为1;而另一个动画B:duration为2秒,speed为2。则两个动画的效果是相同的。不过前提是它们的super layer相同
  • autoreverses:当你设定这个属性为 YES 时,在它到达目的地之后,动画的返回到开始的值,代替了直接跳转到开始的值。
  • beginTime :可以用来设置动画延迟执行时间,若想延迟2s,就设置为CACurrentMediaTime()+2,CACurrentMediaTime()为图层的当前时间
  • TimeOffset:如果一个时间偏移量是被设定,动画不会真正的可见,直到根据父动画组中的执行时间得到的时间都流逝了。
fillMode:

  • kCAFillModeRemoved 这个是默认值,也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态

  • kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态 

  • kCAFillModeBackwards 在动画开始前,你只要将动画加入一个layer,layer便立即进入动画的初始状态并等待动画开始.你可以这样设定测试代码,将一个动画加入一个layer的时候延迟5秒执行.然后就会发现在动画没有开始的时候,只要动画被加入了layer,layer便处于动画初始状态 

  • kCAFillModeBoth 这个其实就是上面两个的合成.动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状

CAPropertyAnimation( 属性动画 )

是CAAnimation的子类,也是个抽象类,要想创建动画对象,应该使用它的两个子类: CABasicAnimation 和 CAKeyframeAnimation

  • keyPath :通过指定CALayer的属性名称为keyPath(NSString类型),只需对CALayer属性的值进行修改,达到相应的动画效果。比如,指定@”position”为keyPath,就修改CALayer的position属性的值,以达到平移的动画效果
keyPath的值可以为:

CAAnimation_第2张图片


CABasicAnimation基本动画

  • fromValue :keyPath相应属性的初始值
  • toValue :keyPath相应属性的结束值
  • byValue:动画从 presentation layer 的当前值开始,加上 byValue 的值后结束。这使得动画更易于重用,因为你不需要精确的指定可能无法提前知道的 from 和 toValue 的值。

CAKeyframeAnimation关键帧动画

  • values:上述的NSArray对象。里面的元素称为”关键帧”(keyframe)。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧
  • path:可以设置一个CGPathRef\CGMutablePathRef,让层跟着路径移动。path只对CALayer的anchorPoint和position起作用。 如果你 设置了path ,那么 values将被忽
  • keyTimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧.当keyTimes没有设置的时候,各个关键帧的时间是平分的
关键帧(keyframe)使我们能够定义动画中任意的一个点,然后让 Core Animation 填充所谓的中间帧。


CAAnimationGroup动画组

CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以 同时并发运行

  • animations:用来保存一组动画对象的NSArray

CATransition过渡

  • type: 动画过渡类型
  • subtype: 动画过渡方向
  • startProgress :动画起点(在整体动画的百分比)
  • endProgress: 动画终点(在整体动画的百分比)

过度的效果有:

fade //交叉淡化过渡(不支持过渡方向) kCATransitionFade
push //新视图把旧视图推出去 kCATransitionPush
moveIn //新视图移到旧视图上面 kCATransitionMoveIn
reveal //将旧视图移开,显示下面的新视图 kCATransitionReveal
cube //立方体翻滚效果 oglFlip //上下左右翻转效果
suckEffect //收缩效果,如一块布被抽走(不支持过渡方向)
rippleEffect //滴水效果(不支持过渡方向)
pageCurl //向上翻页效果
pageUnCurl //向下翻页效果
cameraIrisHollowOpen //相机镜头打开效果(不支持过渡方向)
cameraIrisHollowClose //相机镜头关上效果(不支持过渡方向)

另外可以通过animationWithKeyPath键值对的方式来改变动画,支持的值有:

transform.scale = 比例轉換

transform.scale.x = 闊的比例轉換

transform.scale.y = 高的比例轉換

transform.rotation.z = 平面圖的旋轉

opacity = 透明度

margin

zPosition

backgroundColor 背景颜色

cornerRadius 圆角

borderWidth

bounds

contents

contentsRect

cornerRadius

frame

hidden

mask

masksToBounds

opacity

position

shadowColor

shadowOffset

shadowOpacity

shadowRadius


参考链接:

http://objccn.io/issue-12-1/

http://www.cnblogs.com/lszwhb/p/3930926.html?utm_source=tuicool

http://blog.csdn.net/cocoarannie/article/details/10413301



你可能感兴趣的:(iOS,动画)