您的位置:首页 > 其它

核心动画 Core Animation

2016-01-02 20:03 295 查看
其4个实现类
CABasicAnimation    --
|- CAPropertyAnimation --
CAKeyframeAnimation --                         |
|
CAAnimationGroup  ------------------------------- CAAnimation
|
CATransition      ——————————————


常用属性(通用属性)

duration:动画的持续时间
repeatCount:动画的重复次数
repeatDuration:动画的重复时间
fillMode:决定当前对象在非active时间段的行为.比如动画开始之前,动画结束之后
beginTime:可以用来设置动画延迟执行时间,若想延迟2s,就设置为CACurrentMediaTime()+2,CACurrentMediaTime()为图层的当前时间
以上来自CAMediaTiming协议的属性

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


常用的keyPath

CATransform3D Key Paths

//角度转弧度

#define angle2Radio(angle) ((angle) / 180.0 * M_PI)

#define angle2Radio(angle) ((angle) / 180.0 * M_PI)

transform.rotation.x      NSNumber object
transform.rotation.y      NSNumber object
transform.rotation.z      NSNumber object
transform.rotation       NSNumber object
transform.scale.x        NSNumber object
transform.scale.y        NSNumber object
transform.scale.z        NSNumber object
transform.scale            NSNumber object
transform.translation.x    NSNumber object
transform.translation.y     NSNumber object
transform.translation.z    NSNumber object
transform.translation/NSValue object containing an NSSize or CGSize data type

CGPoint Key Paths

position.x
position.y
position   CGPoint

CGRect Key Paths

bounds.origin     CGPoint.
bounds.origin.x
bounds.origin.y
bounds.size       CGSize.
bounds.size.width
bounds.size.height


CABasicAnimation

常用属性
keyPath:通过指定CALayer的一个属性名称为keyPath(NSString类型),并且对CALayer的这个属性的值进行修改,达到相应的动画效果。比如,指定@”position”为keyPath,就修改CALayer的position属性的值,以达到平移的动画效果
fromValue:keyPath相应属性的初始值
toValue:keyPath相应属性的结束值随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue
⚠注意事项

如果fillMode=kCAFillModeForwards和removedOnComletion=NO,
那么在动画执行完毕后,图层会保持显示动画执行后的状态。
但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变。
比如,CALayer的position初始值为(0,0),
CABasicAnimation的fromValue为(10,10),toValue为(100,100),
虽然动画执行完毕后图层保持在(100,100)这个位置,实质上图层的position还是为(0,0)


CAKeyframeAnimation

属性解析:
values:就是上述的NSArray对象。里面的元素称为”关键帧”(keyframe)。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧
path:可以设置一个CGPathRef\CGMutablePathRef,让层跟着路径移动。path只对CALayer的anchorPoint和position起作用。如果你设置了path,那么values将被忽略
keyTimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧.当keyTimes没有设置的时候,各个关键帧的时间是平分的
CABasicAnimation可看做是最多只有2个关键帧的CAKeyframeAnimation


CAAnimationGroup

CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行
属性解析: animations:用来保存一组动画对象的NSArray 默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来更改动画的开始时间

注意,动画的时间,次数,应该由CAAnimationGroup对象进行设置。


CATransition

CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果。iOS比Mac OS X的转场动画效果少一点

UINavigationController就是通过CATransition实现了将控制器的视图推入屏幕的动画效果
属性解析:

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


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

CATransition的使用

objective-c:

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];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: