UIView的一个重要组成就是CALayer, 我们先创建一个自定义图层
//创建一个图层 CALayer *layer = [CALayer layer]; //设置大小 layer.bounds = CGRectMake(0, 0, 60, 60); //设置位置 layer.position = CGPointMake(100, 200); //设置背景色 layer.backgroundColor = [UIColor blueColor].CGColor; [self.view.layer addSublayer:layer];
运行结果很简单,一个宽高60、蓝色背景的图层
我们设置下内容试试,插入如下代码
// layer.contents = (id)[UIImage imageNamed:@"Icon-60"].CGImage; layer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"Icon-60"].CGImage);
图片结果显示
注意到 代码里面有CGColor,CGImage 这样的格式转换
在设置内容时我用了两种转换方式,contents 类型为id,
CGImage类型是CGImageRef,第一种属于强制转换 ,第二种用__bridge
来桥接,还有CGColor ,为什么需要这种转换?
首先,CALayer是定义在QuartCore框架的[Core Animation]
CGImageRef、CGColorRef两种数据定义在CoreGraphics框架中的
UIColor、UIImage是定义在UIKit框架中的
其次,QuartCore和CoreGraphics框架是跨平台的,支持Mac OS X 、iOS
而UIKit 只能iOS上使用
所以为了保证可移植行QuartCore只能用CGImageRef、CGColorRef等
既然CALayer和UIView能实现相同的显示效果,那么谁比较好?
首先,相比CALayer,UIView增加了事件处理功能,CALayer不能处理用户
的触摸事件,
所以如果显示要与用户交互的话就用UIView,不用的话无所谓,
当然相比UIView,CALayer的性能会高一些
下一篇:02-position-anchorPoint
未完待续
时间: 2024-09-30 15:06:45