归纳笔记07:动画

Core Animation

Core Animation动画的核心是CALayer,每个UIView都有自己的CALayer,而且每个CALayer都可以不断地添加子CALayer,CALayer所在的CALayer被称为父CALayer,CALayer的这种组织方式被称为Layer Tree。

Core Animation动画涉及如下API:

(1)               CAAnimation:它是所有动画类的基类,它实现了CAMediaTiming协议,提供了动画的持续时间、速度和重复计数等。CAAnimation还实现了CAAction协议,该协议为CALayer动画除法的动作提供标准化响应。

(2)               CATransition:CAAnimation的子类,CAAnimation可通过预设的过度效果来控制CALayer层的过渡动画。

(3)               CAPropertyAnimation:它是CApropertAnimation的一个子类它代表一个属性动画,可通过+animationWithKeyPath:类方法来创建属性动画实例。

(4)               CABasicAnimation:CAPropertAnimation的子类,简单控制CALayer层的属性改变,从而实现动画效果。

(5)               CAKeyframeAnimation:CAPropertyAnimation的子类,关键帧的属性动画,该动画最大的特点在于可通过values属性指定多个关键帧,通过多个关键帧可以指定动画的各阶段的关键值。

(6)               CAAnimationGroip:它是CAAnimation的子类,用于将多个动画组合在一起执行。


使用CALayer

CALayer代表一个层,它提供了一个+layer类方法来创建CALayer层,具体如下:

(1)    创建一个CALayer。

(2)    设置CALayer的contents属性即可设置该CALayer所显示的内容,该属性通常可指定一个CGImage,即代表该CALayer将要显示的图片。

(3)    为CALayer设置backgroundColor、frame、position、anchorPoint、border、shadow等属性,具体参考文档、

(4)    将CALayer添加到父CALayer中即可。


使用CATransition控制过渡动画

CATransition通常用于通过CALayer控制UIView内子控件的过渡动画,具体步骤如下:

(1)    创建CATransition对象。

(2)    为CATransition设置type和subtype两个属性、

(3)    如果不需要动画执行整个过程,可以指定startProgress、endProgress属性。

(4)    调用UIView的layer属性的addnimation:forKey:方法控制该UIView内子控件的过渡动画。

CAAnimation提供如下属性和方法:

(1)               removedOnCompletion:该属性用于指定动画完成时是否从目标CALayer上删除该动画。

(2)               timingFunction:该属性用于指定一个CAMediaTimingFuncion对象,该对象负责控制彼岸花步长。

(3)               -animationDidStart:(CAAnimation*)theAnimation:该动画开始时回调该方法。

(4)               -animationDidStop:(CAAnimation*)theAnimation finished:(BOOL)flag:该动画结束时回调该方法。

CATransition的type属性用于控制动画类型,它支持如下值:

(1)    kCATransitionFade:通过渐隐效果控制子组件的过渡。这是默认的属性值。

(2)    kCATransitionMoveIn:通过移入动画控制子组件的过渡。

(3)    kCATransitionPush:通过推入动画控制子组件的过渡。

(4)    kCATransitionReveal:通过揭开动画控制子组件的过渡。

除此之外,该属性还支持如下私有动画:

(1)    cube:通过立方体旋转动画控制子组件的过渡。

(2)    suckEffect:通过收缩动画控制子组件的过渡。

(3)    oglFlip:通过翻转动画控制子组件的过渡。

(4)    rippleEffect:通过水波动画控制子组件的过渡。

(5)    pageCurl:通过页面揭开动画控制子组件的过渡。

(6)    pageUnCurl:通过放下页面动画控制子组件的过渡。

(7)    cameraIrisHollowOpen:通过镜头打开动画控制子组件的过渡。

(8)    cameraIrisHollowClose:通过镜头关闭动画控制子组件的过渡。

CATransition的subyte属性用于控制动画方向,它支持如下值:

(1)    kCATransitionFromRight。

(2)    kCATransitionFromLeft。

(3)    kCATransitionFromTop。

(4)    kCATransitionFromBottom。

实际上,控制UIView内子控件的过渡还有另一种方式,具体步骤如下:

(1)    调用UIView的beginAnimation方法开始动画。

(2)    调用UIView的setAnimationTransition:forView:cache:设置动画类型、setAnimationCurve:方法设置动画的变化曲线。

(3)    调用UIView的commitAnimations方法提交动画。


使用属性动画

属性动画由CAPropertyAnimation代表,该对象用户控制CALayer的动画属性持续改变,当CALayer的动画属性持续改变时,CALayer的外观就会持续改变。

CAPropertyAnimation提供如下类方法创建属性动画:

+(id)animationWithKeyPath:(NSString*)keyPath:该方法仅需要一个参数,该参数只是一个字符串类型的值,指定CALayer的动画属性名,设置该属性动画控制CALayer的哪个动画属性持续改变。

除此之外,CAPropertyAnimation还支持如下属性:

(1)   keyPath:该属性返回创建CAPropertyAnimation时指定的参数

(2)   additive:该属性指定该属性动画是否以当前动画效果为基础。

(3)   cumulative:该属性指定动画是否为累加效果。

(4)   valueFunction:该属性值是一个CAValueFuntion对象,该对象负责对属性改变的插值计算。系统已提供默认插值计算方式,一般无须指定该属性。

(5)   affineTransform:该属性值指定一个CGAffineTransform对象,该对象代表对CALayer执行X、Y两个维度的旋转、缩放、位移、斜切、镜像等变换矩阵。

(6)   transform:该属性值制定一个CATransform3D对象。该对象代表对CALayer执行X、Y、Z三个维度中的旋转、缩放、位移、斜切、镜像等变换矩阵。

调用CALayer的addAnimation:forKey:添加动画即可,方法如下:

(1)-addAnimation:forKey:为该CALayer添加一个动画。

(2)-animationForKey:控制该CALayer执行指定key所对应的动画。

(3)-removeAllAnimation:删除该CALayer上添加的所有动画。

(4)-removeAnimationForKey:根据key删除该CALayer上指定的动画。

(5)-animationKeys:获取该CALayer上添加的所有动画key所组成的动画。


控制移动路径

对CAKeyframeAnimation而言,它除了可通过values属性指定动画过程中的多个值之外,还可通过path属性指定CALayer的移动路径,该属性值就是的CGPathRef,通过这种方式即可控制CALayer按我们指定的轨迹移动,从而执行更细致的动画。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值