核心动画的总结

本文详细介绍了 Core Animation 的使用步骤、常见动画类及其属性,包括 CABasicAnimation、CAKeyframeAnimation、CATransition 和 CAAnimationGroup 的具体应用,以及如何通过调整属性实现不同动画效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.core annimation的使用步骤
  (1)使用它需要先添加QuarzCore。framework框架和引入头文件<QuartzCore/QuartzCore.h>(ios7不需要)
  (2)初始化一个CAAnimation对象,并设置一些动画相关属性
  (3)通过调用CALayer的addAnimation:forkey:方法增加CAAnimation对象到CALayer中,这样就能执行动画了
  (4)通过调用CALayer的removeAnimationForKey:方法可以停止CALayer中的动画
2.CAAnimation是所有动画类的父类,应该使用它的子类。常见的属性有:
duration:动画的时间
repeatCount:动画的重复次数
timingFunction:控制动画运行的节奏
说明:
(1)能用的动画类只有4个子类:CABasicAnimation,CAKeyframeAnimation,CATransition,CAAnimationGroup
(2)CAmediaTiming是一个协议(protocol)
CAPopertyAnimation是CAAnimation的子类,但是不能直接使用,要想创建对象,应该使用它的两个子类:CABasicAnimation和CAKeyAnimation
它有个NSString类型的keypath属性,你可以指定CALayer的某个属性名为keypath,并且对CALayer的这个属性的值进行修改,达到相应的动画效果。比如,指定@“position”为keypath,就会修改CALayer的position属性的值,已达到平移的效果
3.补充说明
所有动画对象的父类,负责控制动画的持续时间和速度,是个抽象类,不能直接使用,应该使用它的具体的子类
属性解析:(红色表示来自CAMediaTiming协议的属性)
duration:动画的持续时间
repeatCount:动画的重复次数
repeatDuration:动画的重复时间
removedOnCompletion:默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后状态,那就设置为NO,不过还要设置fillMode为KCAFillModeForwards
fillMode:决定当前对象在非active时间段的行为。比如动画开始之前,动画结束之后 (填充方式)
//向前
CA_EXTERN NSString * const kCAFillModeForwards
   
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
//向后
CA_EXTERN NSString * const kCAFillModeBackwards
   
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
//先向前再向后
CA_EXTERN NSString * const kCAFillModeBoth
   
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
//向前
CA_EXTERN NSString * const kCAFillModeRemoved
   
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
beginTime:可以用来设置动画延迟执行时间,若想延迟2s,就设置为CACurrentMediaTime()+2,CACurrentMediaTime()为图层的当前时间
timingFuction:速度控制函数,控制动画运行的节奏   
//缓冲函数
pulldownAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
//立即加速后到保持匀速到停止
CA_EXTERN NSString * const kCAMediaTimingFunctionLinear
   
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
//慢慢加速到突然停止
CA_EXTERN NSString * const kCAMediaTimingFunctionEaseIn
   
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
//全速开始到慢慢减速停止
CA_EXTERN NSString * const kCAMediaTimingFunctionEaseOut
   
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
//慢慢加速到慢慢减速的过程
CA_EXTERN NSString * const kCAMediaTimingFunctionEaseInEaseOut
   
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
//默认样式与 KCAMediaTimingFunctionEaseOut 相同
CA_EXTERN NSString * const kCAMediaTimingFunctionDefault
delegate:动画代理

4.基础动画
keypath的属性值:
        1.position(平移) 2.bounds(缩放) 3.transform(旋转)

5.关键帧动画(记录它的多个状态,以此来达到动画的效果)
CAKeyframeAnimation是CApropertyAnimation的子类,跟CABasicAnimation的区别:CABasicAnimation只能从一个数值(fromValue)变到另外一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值
属性解析:
values:就是上述的NSArray对象。里面的元素称为“关键帧”(keyframe)。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧
path:可以设置一个CGPathRef/CGMutablePathRef。让层跟着路径移动。path只对CALayer的anchor和position起作用。如果你设置了path,那么values将被忽略。
keyTimes:可以为对应关键帧指定对应的时间点,起取值范围为0到1,keyTimes中的每一个时间值都对应values中的每一帧。当keyTimes没有设置的时候,各个关键帧的时间是平分的
说明:CABasicAnimation可看做是最多只有2个关键帧的CAkeyframeAnimation

6.转场动画
CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果。ios比mac OS X的转场效果少一点
UINavigationController 就是通过CATranstion实现了将控制器的视图推入屏幕的动画效果
属性解析:
type:动画过渡类型
注释:

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

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

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

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

cube     // 立方体翻滚效果     

oglFlip    // 上下左右翻转效果     

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

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

pageCurl     // 向上翻页效果     

pageUnCurl   // 向下翻页效果     

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

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


subtype:动画过渡方向
startProgress:动画起点
endProgress:动画终点


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








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值