1. 核心代码
layer.contents = (__bridge id)image.CGImage;
2. 分析
- CALayer 有一个id类型(Mac OS的历史原因)的属性为
contents
, 之所以被定义为id类型,是因为在Mac OS系统上,这个属性对CGImage和NSImage类型的值都起作用. - UIImage有一个CGImage属性,它返回一个"CGImageRef", 直接赋值给CALayer的contents,那你将会得到一个编译错误, 因为
CGImageRef
并不是一个真正的Cocoa对象,而是一个Core Foundation类型(C语言指针). - 尽管Core Foundation类型跟Cocoa对象在运行时貌似很像(被称作toll-free bridging),他们并不是类型兼容的,不过你可以通过bridged关键字转换.
3. 全部代码
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
CALayer *layer = [CALayer layer];
layer.frame = CGRectMake(([UIScreen mainScreen].bounds.size.width - 200) / 2, 200, 200, 200);
layer.backgroundColor = [UIColor magentaColor].CGColor;
layer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"SQIImg"].CGImage);
[self.view.layer addSublayer:layer];
}
4. 效果