这是我的设置:我有一个 CALayer,我想向其中添加子层。我通过设置 UILabel 创建这些子层,然后将 UILables 层添加到我的主层。当然,这会使沉重的 UILabel 对象在后台徘徊。是否可以从 UIView 获取图层及其所有内容并摆脱 UIView 本身?
我已经尝试过这个:
UILabel* label;
[...]
[mainLayer addSublayer:[label.layer copy]];
[label release];
但是每当我释放 UIView 时,该层的内容也会被删除。这是否可能,或者 UIView 的层是否始终需要 UIView 本身来显示其内容?我将图层视为一种画布,UIView 在其上进行绘制。我想我的这个假设可能是错误的:)
我不明白为什么你不能复制图层。确实,图层是 UIView 的“组成部分”。但最终它只是另一个具有多个属性的对象。
实际上 CALayer 有一个方法叫做:
- (id)initWithLayer:(id)layer
但它并不是为了复制图层。 (你可以阅读Apple的文档来了解原因)
CALayer 不符合 NSCopying,所以你有两个选择:
- 将其子类化并实现
“copyWithZone:”(并符合
NS复制)
- 编写一个方法/函数
返回 CALayer 的“副本”
无论您选择哪种方式,您要问的问题是:您要复制 CALlayer 的哪些属性?
假设您只想复制内容和框架:
CALayer copyLayer = [CALayer layer];
copyLayer.contents = theLayerToBeCopied.contents;
copyLayer.frame = theLayerToBeCopied.frame;
return copyLayer;
您可以浏览并复制该图层的每个属性,或者只复制您需要的属性。放入 CALayer 类别可能是一个好方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)