问题
如何为您的图层创建单独的上下文并将该上下文合并到 super 图层中?
为什么我要这样做
我想将 View 层的绘制抽象为单独的对象/文件。我想用图层构建一个 View ,然后将其放置在另一个 View 之上,并有其他可能性。
问题是我不知道您应该将 View 的一部分绘制到图层中,而不直接绘制到主视图子图层的上下文中。
这是一个示例,我使用 HFFoundation
对 CALayer
进行了子类化:
@implementation HFFoundation
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
UIBezierPath *foundation = [UIBezierPath bezierPath];
// some drawing goes on here in the form of messages to [foundation]
}
@end
现在,当我在 View 中实例化自定义图层时 (void)drawRect:(CGRect)rect
我这样:
HFFoundation *foundation = [HFFoundation new];
foundation.frame = CGRectMake(40, viewHeight - 100, 300, 100);
foundation.backgroundColor = [[UIColor colorWithRed:1 green:.4 blue:1 alpha:0.2] CGColor];
[self.window.rootViewController.view.layer addSublayer:foundation];
我得到这个结果(没有出现绘图,只有图层框架内的背景颜色):
如果我之后[foundation drawLayer:foundation inContext:context];
,绘图就会出现,但它出现在顶层上下文中,而不是在foundation
层中。由于 foundation
层在层次结构中也较低,因此它隐藏了绘图(除非我减少它的 alpha,而我在图片中没有减少它):
如何绘制到图层本身,即在这种情况下基础
?
最佳答案
要插入子层并设置其索引,您需要这段代码:
[view.layer insertSublayer:foundation atIndex:0];
关于ios - 如何在图层内部绘制并仅在 [view Layer addSublayer :newLayer]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16480195/