ios - 如何在图层内部绘制并仅在 [view Layer addSublayer :newLayer]?

标签 ios objective-c cocoa-touch calayer cgcontext

问题

如何为您的图层创建单独的上下文并将该上下文合并到 super 图层中?

为什么我要这样做

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

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

这是一个示例,我使用 HFFoundationCALayer 进行了子类化:

@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];

我得到这个结果(没有出现绘图,只有图层框架内的背景颜色):

adding a sublayer

如果我之后[foundation drawLayer:foundation inContext:context];,绘图就会出现,但它出现在顶层上下文中,而不是在foundation层中。由于 foundation 层在层次结构中也较低,因此它隐藏了绘图(除非我减少它的 alpha,而我在图片中没有减少它):

it draws straight into the context

如何绘制到图层本身,即在这种情况下基础

最佳答案

要插入子层并设置其索引,您需要这段代码:

[view.layer insertSublayer:foundation atIndex:0];

关于ios - 如何在图层内部绘制并仅在 [view Layer addSublayer :newLayer]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16480195/

相关文章:

ios - 应用内购买仅需 0.00 美元

ios - 如何将 AFNetworking 添加到 XCode 应用程序

ios - 第六代 iPod Touch 的平台字符串是什么?

iphone - ios 在我自己的应用程序中添加类似 dropbox 的应用程序功能

ios - 隐藏另一个类的自定义按钮

objective-c - 应用程序在设备上启动时崩溃,但在模拟器上很好

ios - 无法为 uialertview 设置标签

ios - 如何删除使用 xep-0136(消息存档)保存的聊天消息?

iphone - iPhone游戏咖啡馆音效

ios - 我们如何根据 BOOL 对核心数据获取结果进行排序