Core Animation 浅析

Core Animation 浅析

(理解有问题的地方,欢迎指出来)

1.层(CALayer)

CALayer是所有界面元素的基类,包括动画。一般情况下我们在绘制界面的时候都是使用的UIView或者UIView的子类,比如我们想添加一张图片用UIImageView,显示一大段文字用UITextField等。UIView的直接父类是:UIResponder,且UIView中有个属性:

@property(nonatomic,readonly,retain) CALayer *layer;// returns view's layer. Will always return a non-nil value. view is layer'sdelegate

由此可见:UIView封装了CALayer并且是CALayer的代理,CALayer负责显示内容,但是不能进行交互,UIView可以进行交互。我们平时在UIView上所进行的界面的操作实际上是对CALayer的操作。比如添加一张图片,实际上是在CALayer上加了一张图。所有的UIView以及子类实例,都有一个root Layer,UIView提供了一个类方法替换它: + (Class)layerClass;
下面介绍几个CALayer重要属性:

1).frame、bounds、position 和 anchorPoint:

frame是外部点坐标,相对于父视图,由此可以确定layer的大小、位置;
bounds是内部点坐标,只能确定layer大小;
position是外部点坐标,结合bounds可以确定layer大小、位置;
anchorPoint比较特殊是内部单位坐标,在iOS下左上角(0.0),右下角(1.0,1.0),在旋转时可以通过改变anchorPoint使其围绕layer上任意点旋转。
2).contents:
虽然改属性是id类型的(这是mac的遗留问题),但是它只能接收CGImageRef的对象,否则layer显示一片空白;
3). masksToBounds : 
这个属性比较有用,可以保证超出父layer的部分被剪裁。比如做一个圆形layer,上面加一个图片,图片会超出显示,可以设置该属性为YES将多出来的剪切。

4).contentsGravity:

设置contents位置,是个NSString类型而不是枚举,可以居中、靠左,按比例缩放等。

5).contentsScale:

这个属性是用来适应Retina屏的,是图片像素点和坐标点的比例,默认为1.0。如果在Retina屏下显示2倍图,图片会被放大,因为默认一个点显示一个像素点,但是2倍图像素点是普通图的4倍,如果想要显示正常需要在一个点上显示4个像素点才行。

6).contentsRect:

这是一个单位坐标,可以做图片拼合。如果先显示一张大图的左上角1/4在当前layer而不是全图,可以把该值设为(0, 0, 0.5, 0.5)。通过类似方法,可以把一张大图分成无数小图。

7).mask:

类似蒙版,比如有张大图,你不想显示全部,只想显示中间固定大小的一个圆形。比如:圆形头像。可以在方形头像上盖一层圆形的蒙版,效果和masksToBounds一样。

检测哪个Layer被点击,以及某个点是否在该Layer上:

- (CALayer *)hitTest:(CGPoint)p;
- (BOOL)containsPoint:(CGPoint)p;
CALayer子类:

1).CAEmitterLayer:一个高性能的粒子引擎,被用来创建实时例子动画如:烟雾,火,雨等等这些效果。

2).CAGradientLayer:生成两种或更多颜色平滑渐变的

3).CAMetalLayer

4).CAEAGLLayer

5).CAReplicatorLayer:高效生成许多相似的图层,在有很多重复图层时比较有用。

6).CAScrollLayer:实现的效果类似UIScrollView,

7).CAShapeLayer:通过矢量图形而不是bitmap来绘制的图层子类

8).CATextLayer:以图层的形式包含了UILabel几乎所有的绘制特性,并且额外提供了一些新的特性。

9).CATiledLayer

10).CATransformLayer:更方便的做一些3D变换

2.动画(CAAnimation)

CAAnimation实现了两个重要协议CAAction、CAMediaTiming。CAAnimation有三个子类:

CAPropertyAnimation:该类派生了两个子类:

CABasicAnimation:对动画层的属性变化,提供了简单的动画插值

CAKeyframeAnimation:帧动画,可以定义行动路线

CAAnimationGroup:多个动画可同时进行;

CATransition:试图切换的渐变效果(推拉push效果,消退fade效果,揭开reveal效果)。


你可能感兴趣的:(iOS开发)