Core Animation简介

来源:互联网 发布:创维酷开系统下载软件 编辑:程序博客网 时间:2024/03/29 03:34

之前介绍了UIView动画的使用,UIView可以实现一般动画,但是更为复杂的动画,需要用core animation
这里写图片描述

core animation基于openGL 和 core graphics。

Core Animation是一套包含图形绘制、投影、动画的Objective-C类集合,该框架包含在QuartzCore.framework中,它因为被用于处理更为强大的平滑的转场效果而引入OS X Leopard和iOS而出名。

QuartzCore /Quartz 2D 基于core graphics;

CALayer

Layer Classes是core animation的基础。Layer Classes提供了一个抽象的概念,这个概念对于那些使用NSview和UIview的开发者来说是很熟悉的。基础层是由CAlayer类提供的,CAlayer是所有Core Animation层的父类。

同一个视图类的实例一样,一个CAlayer实例也有一个单独的superlayer和上面所有的子层(sublayers),它创建了一个有层次结构的层,我们称之为layer tree。layers的绘制就像views一样是从后向前绘制的,绘制的时候我们要指定其相对与他们的superlayer的集合形状,同时还需要创建一个局部的坐标系。layers可以做一些更复杂的操作,例如rotate(旋转),skew(倾斜),scale(放缩),和project the layer content(层的投影)。
其实CALayer是个简单的类,它是用来在屏幕上显示内容展示的矩形区域。那么和UIView区别是什么?
1.每个UIView 都有 CALayer,即 UIView.layer或者[UIView layer] ,这个layer叫做root layer。

2.UIView可以响应事件,而CALayer只负责显示。(UIView是有delegate的CALayer)

3.CALayer 有两个属性,position(相对于父类的位置)、anchorPoint(锚点,x范围0~1,y范围0~1,决定图层身上的哪个点会在position所指的位置),锚点在旋转的时候作为支点;

注:frame:(x,y,with,height) = bounds(x,y,width,height) + position(x,y)+锚点

CAAnimation

CAAnimation分为这4种,他们分别是

1.CABasicAnimation

通过设定起始点,终点,时间,动画会沿着你这设定点进行移动。

2.CAKeyframeAnimation

Keyframe顾名思义就是关键点的frame,你可以通过设定CALayer的始点、中间关键点、终点的frame,时间,动画会沿你设定的轨迹进行移动,也就是说它可以把一个baseAnimation分成多个点和多个时间段来执行;

3.CAAnimationGroup

Group也就是组合的意思,就是把对这个Layer的所有动画都组合起来。PS:一个layer设定了很多动画,他们都会同时执行,如何按顺序执行我到时候再讲。

4.CATransition
这个就是苹果帮开发者封装好的一些动画。

下面通过看一些代码来更加直观的了解这几种动画
CABasicAnimation动画:
首先,将”QuartzCore.framework”这个库添加到项目中。并且在需要使用CABaseAnimation类的地方import头文件。
然后设置动画的属性,下面为属性和设置说明:
duration 动画的时长
repeatCount 重复的次数。不停重复设置为 HUGE_VALF
repeatDuration 设置动画的时间。在该时间内动画一直执行,不计次数。
beginTime 指定动画开始的时间。从开始延迟几秒的话,设置为【CACurrentMediaTime() + 秒数】 的方式
timingFunction 设置动画的速度变化
autoreverses 动画结束时是否执行逆动画
fromValue 所改变属性的起始值
toValue 所改变属性的结束时的值
byValue 所改变属性相同起始值的改变量
赋:CABasicAnimation动画中animationwithkeypath的常用值:

transform.scale = 比例轉換transform.scale.x = 闊的比例轉換transform.scale.y = 高的比例轉換transform.rotation.z = 平面圖的旋轉opacity = 透明度margin = 布局zPosition = 翻转backgroundColor = 背景颜色cornerRadius = 圆角borderWidth = 边框宽bounds = 大小contents = 内容contentsRect = 内容大小cornerRadius = 圆角frame = 大小位置hidden = 显示隐藏maskmasksToBoundsopacitypositionshadowColorshadowOffsetshadowOpacityshadowRadius

代码例子:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];  // 动画选项的设定  animation.duration = 2.5; // 持续时间  animation.repeatCount = 1; // 重复次数  // 起始帧和终了帧的设定  animation.fromValue = [NSValue valueWithCGPoint:myView.layer.position]; // 起始帧  animation.toValue = [NSValue valueWithCGPoint:CGPointMake(320, 480)]; // 终了帧  // 添加动画  [myView.layer addAnimation:animation forKey:@"move-layer"];

赋:

组合动画:
这里写图片描述
这里写图片描述
这里写图片描述

关键帧动画:
这里写图片描述
这里写图片描述
这里写图片描述

CATransition动画:

transition.type 的类型可以有
淡化、推挤、揭开、覆盖
NSString * const kCATransitionFade;
NSString * const kCATransitionMoveIn;
NSString * const kCATransitionPush;
NSString * const kCATransitionReveal;
这四种,
transition.subtype
也有四种
NSString * const kCATransitionFromRight;
NSString * const kCATransitionFromLeft;
NSString * const kCATransitionFromTop;
NSString * const kCATransitionFromBottom;

私有的类型的动画类型:
立方体、吸收、翻转、波纹、翻页、反翻页、镜头开、镜头关
transition.type = @”cube”;
transition.type = @”suckEffect”;
transition.type = @”oglFlip”;
transition.type = @”ripplrEffect”;
transition.type = @”pageCurl”;
transition.type = @”pageUnCurl”;
transition.type = @”cameraIrisHollowOpen”;
transition.type = @”cameraIrisHollowClose”;

CATransition *transition;transition = [CATransition animation];transition.duration = 2.0f;transition.type = @"cube";transition.subtype = kCATransitionFromLeft;[self.view exchangeSubviewAtIndex:1 withSubviewAtIndex:0];[self.view.layer addAnimation:transition forKey:@"animation"];

(1)values属性

values属性指明整个动画过程中的关键帧点,例如上例中的A-E就是通过values指定的。需要注意的是,起点必须作为values的第一个值。

(2)path属性

作用与values属性一样,同样是用于指定整个动画所经过的路径的。需要注意的是,values与path是互斥的,当values与path同时指定时,path会覆盖values,即values属性将被忽略。

animationWithKeyPath

kCAMediaTimingFunctionLinear//线性

kCAMediaTimingFunctionEaseIn//淡入

kCAMediaTimingFunctionEaseOut//淡出

kCAMediaTimingFunctionEaseInEaseOut//淡入淡出

kCAMediaTimingFunctionDefault//默认

calculationMode属性决定了物体在每个子路径下是跳着走还是匀速走,跟timeFunctions属性有点类似

kCAAnimationLinear//线性,默认

kCAAnimationDiscrete//离散,无中间过程,但keyTimes设置的时间依旧生效,物体跳跃地出现在各个关键帧上

kCAAnimationPaced//平均,keyTimes跟timeFunctions失效

kCAAnimationCubic//平均,同上

kCAAnimationCubicPaced//平均,同上

0 0