iOS 画图iOS 动画家族tom

初探CALayer属性

2016-11-28  本文已影响741人  小沛2016

一直觉得一个view就一个layer

到今天才发现不是这样子的

其关系图如下

图片.png

CALayer属性表如下

图片.png

CALayer和UIView的区别

1.UIView是UIKit的(只能iOS使用),CALayer是QuartzCore的(iOS和mac os通用)

2.UIView继承UIResponder,CALayer继承NSObject,UIView比CALayer多了一个事件处理的功能,也就是说,CALayer不能处理用户的触摸事件,而UIView可以

3.UIView来自CALayer,是CALayer的高层实现和封装,UIView的所有特性来源于CALayer支持

4.CABasicAnimation,CAAnimation,CAKeyframeAnimation等动画类都需要加到CALayer上

其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层

在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层
@property(nonatomic,readonly,retain) CALayer *layer;

当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示

换句话说,UIView本身不具备显示的功能,是它内部的层才有显示功能

关于CALayer的疑惑

首先
CALayer是定义在QuartzCore框架中的(Core Animation)
CGImageRef、CGColorRef两种数据类型是定义在CoreGraphics框架中的
UIColor、UIImage是定义在UIKit框架中的

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

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

今天发现个有趣的事情 就是我们方法名可以写中文!!!!!!!!!

下面是我在layer那敲的代码给各位分享一下

import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

}

pragma mark - 仿射变换

pragma mark - 剪切图片的一部分

pragma mark - 图层添加边框和圆角

pragma mark - 剪切超过父图层的部分

pragma mark -阴影路径

}

pragma mark - 添加阴影_02

pragma mark - 图层内容和内容模式_01

@end

上一篇 下一篇

猜你喜欢

热点阅读