动画 (1) ----- CALayer

2018-03-12  本文已影响15人  fjytqiu

CALayer 和 UIView 联系
CALayer的相关属性
CALayer之隐式动画

一. CALayer 和 UIView 联系

  1. 在iOS中,能看得见的基本上都是UIView(比如按钮、图片、文本等),而 UIView之所以能显示在屏幕上,是因为它拥有CALayer对象。

  2. 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层

  3. 当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示。换句话说,UIView本身不具备显示的功能,是它内部的层才有显示功能

  4. CALayer不能处理用户的触摸事件。所以,如果显示的东西需要交互就选择UIView,不需要的话用 UIView或者CALayer都可以,后者性能会高一些,它少了事件处理的功能,更加轻量级。

二. CALayer的相关属性

宽、高
@property CGRect bounds;

背景颜色(CGColorRef类型)
@property CGColorRef backgroundColor;

边框颜色(CGColorRef类型)
@property CGColorRef borderColor;

边框宽度
@property CGFloat borderWidth;

圆角半径
@property CGColorRef borderColor;

内容(比如设置为图片CGImageRef)
@property(retain) id contents;

位置(默认指中点(0.5,0.5),随anchorPoint变化)
@property CGPoint position;

锚点(x,y的范围都是0-1),决定了position的含义
@property CGPoint anchorPoint;


形变属性
@property CATransform3D transform;

旋转
CATransform3DMakeRotation(M_PI, 1, 0, 0);
平移
CATransform3DMakeTranslation(x,y,z)
缩放
CATransform3DMakeScale(x,y,z);

可以通过KVC的方式进行设置属性.
但是需要将CATransform3DMakeRotation(结构体)转成对象.
🍐:
NSValue *value = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 0, 0)];
[_imageView.layer setValue:value forKeyPath:@"transform.scale"];

三. CALayer之隐式动画

  1. UIView内部默认关联着一个CALayer,可称为Root Layer(根层),而所有非Root Layer(手动创建的CALayer),都存在着隐式动画

  2. 隐式动画:
    非Root Layer的部分属性修改时,系统默认会自动产生动画效果,这样的属性(二中的属性)称为Animatable Properties(可动画属性)

  3. 隐式动画关闭(默认是开启)
    可以通过动画事务(CATransaction)关闭默认的隐式动画效果

[CATransaction begin];
[CATransaction setDisableActions:YES];
self.view.layer.position = CGPointMake(15, 15);
[CATransaction commit];

备注

CALayer是在QuartzCore框架中定义的
CGImageRef、CGColorRef两种数据类型在CoreGraphics中定义的
UIColor、UIImage是在UIKit中定义的

其次
QuartzCore框架和CoreGraphics框架是可以跨平台使用的,在iOS和Mac OS X上都能使用
但是UIKit只能在iOS中使用

为了保证可移植性,QuartzCore不能使用UIImage、UIColor,只能使用CGImageRef、CGColorRef

上一篇下一篇

猜你喜欢

热点阅读