问题
您如何为您的层创建一个单独的上下文并将该上下文合并到超级层中?
为什么我想这样做
我想将视图层的绘图抽象为单独的对象/文件。我想从层中构建一个视图,然后将它们放置在另一个之上,并有其他可能性。
问题是我不知道您应该将视图的一部分绘制到一个层中,而不直接绘制到主视图子层的上下文中。
这是一个示例,我将其子类CALayer
化为HFFoundation
:
@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
现在,当我在视图中实例化我的自定义层时,我是(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];
我得到了这个结果(没有图纸出现,只有图层框架内的 bg 颜色):
如果我[foundation drawLayer:foundation inContext:context];
之后,绘图会出现,但它出现在顶层上下文中,而不是在foundation
层中。由于foundation
层在层次结构中也较低,它隐藏了绘图(除非我减少它的 alpha,我没有在图片中):
您如何绘制到图层本身,即foundation
在这种情况下?