关于UIView和CALayer的问题、在iOS的面试题中很是常见、今天就来说一下二者到底有何区别。
1、首先、来看看通过UIView和CALayer书写的效果:
CALayer *layer = [[CALayer alloc] init];
layer.frame = CGRectMake(40, 40, 100, 100);
layer.backgroundColor = [UIColor redColor].CGColor;
[self.view.layer addSublayer:layer];
UIView *view = [[UIView alloc] init];
view.frame = CGRectMake(40, 200, 100, 100);
view.backgroundColor = [UIColor yellowColor];
[self.view addSubview:view];
效果图
图中红色视图是通过CALayer书写的、黄色视图由UIView写成、可以看到在内容的展示上二者并没有什么明显的区别。
那么下面具体说一下:
1: 从框架来说
CALayer 基于 QuartzCore 框架
UIView 基于 UIKit 框架
CGImageRef、CGColorRef 这两种数据类型是定义在CoreGraphics 框架中的、
而UIImage、UIColor 则是定义在 UIKit 框架中的。
QuartzCore 和 CoreGraphics 可以跨平台使用,适用于iOS 和 Mac OSX、但是为了可移植性、QuartzCore中只能用CGImageRef、CGColorRef
2: 从父类来说
使用CALayer同样可以实现与UIImageView一样的展示效果。那么到底有什么区别呢?
其实、CALayer是直接继承自NSObject的、而UIView是直接继承自UIResponder的。
所以、相比于CALayer来说、UIView多了一个事件处理功能、也就是说、CALayer是不能处理用户的触摸事件的、而UIView可以。
那么、当我们展示出来的东西需要实现和用户交互的时候去使用UIView、而不需要的交互的时候CALayer和UIView都可以。
当然、由于CALayer不需要处理交互事件、所以是轻量级的、性能要比UIView高。
以上就是UIView和CALayer的异同。
希望我的文章能够对大家有所帮助。