如何将CALayer的内容设置为CGImageRef?

10
我想将一个CALayer的内容设置为一张图片。这个CALayer有一个contents属性。文档上说,"一个图层可以将这个属性设置为CGImageRef来显示图像作为它的内容。" 但是该属性需要一个id,所以在Xcode中我遇到了以下问题:

语义问题:从'CGImageRef'(又名'struct CGImage *')分配到'id'的不兼容指针类型

当只接受id时,我如何将CGImageRef分配给contents属性?我错过了什么吗?
2个回答

11

不再使用(id),你可以使用(__bridge id)来解决类型转换问题。


+1 jerry。我发现一个简单的(id)强制转换不起作用,但你的建议有效。这是因为我使用的是c++11吗? - user585968

6

CGImageRef显式转换为id应该可以解决警告。例如:

CGImageRef imageRef;

...

layer.contents = (id) imageRef;

应该可以正常工作。

4
Bingo。但我并不完全理解为什么。CGImageRef不是一个NSObject,因此不能表示为id...对吧?这个转换实际上发生了什么? - Simon Cave
@SimonCave 在运行时将类型转换为 id 不会产生任何开销。实际上,即使没有进行类型转换,编译后的二进制文件看起来也应该是一样的。关键是文档告诉我们可以将 CGImageRef 设置为 contents,所以我们只是盲目地相信它。根据文档,如果 contents 的唯一有效类型是 CGImageRef,那么内部实现实际上可能会将其强制转换回 CGImageRef - tia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接