0

问题

您如何为您的层创建一个单独的上下文并将该上下文合并到超级层中?

为什么我想这样做

我想将视图层的绘图抽象为单独的对象/文件。我想从层中构建一个视图,然后将它们放置在另一个之上,并有其他可能性。

问题是我不知道您应该将视图的一部分绘制到一个层中,而不直接绘制到主视图子层的上下文中。

这是一个示例,我将其子类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在这种情况下?

4

1 回答 1

1

要插入一个子层并设置它的索引,您需要这段代码:

[view.layer insertSublayer:foundation atIndex:0];
于 2013-05-10T12:46:25.373 回答