【问题标题】:CALayer/UIView crashes when I touch the UIVIew当我触摸 UIVIew 时,CALayer/UIView 崩溃
【发布时间】:2026-01-13 12:25:01
【问题描述】:

我正在使用自定义图层在我的UIView 上绘图。为了使图层无效和更新,我需要将我的视图设置为我的CALayer 的代表。完成后,它会正确地绘制我的文本但是当视图接收到触摸时应用程序崩溃。 我做错了什么?

- (void) layoutSubView {
    if (drawLayer == nil) {
        drawLayer = [[CALayer alloc] init];
        [drawLayer setDelegate:self];
        [[self layer] addSublayer:drawLayer];
    }
    [drawLayer setFrame:[self bounds]]; 
    [drawLayer setNeedsDisplay];
}

上面是我设置CALayer的代码,下面是覆盖的drawLayer方法。

- (void) drawLayer:(CALayer *)layer 
     inContext:(CGContextRef)ctx {

        if (layer == drawLayer) {
        UIGraphicsPushContext(ctx);
        [self drawTitle:ctx];
        UIGraphicsPopContext();
    }
}

这是堆栈。

【问题讨论】:

  • 您是否覆盖了 touchesBegan/Moved/End?崩溃的原因是什么?
  • 不,我没有覆盖它们,我应该只是为了防止崩溃吗?
  • 我不这么认为,但我会尝试覆盖 convertPoint:fromLayer 以查看传入了哪些参数...您没有说崩溃时收到的确切错误消息。 ..

标签: iphone xcode uiview calayer stack-trace


【解决方案1】:

您不能使用UIView 对象作为其自身层以外的层的委托。它声明here。您将需要分配一些其他对象作为其委托。

【讨论】:

  • 谢谢,我想我应该 RTFM =) 那我会为这个层创建一个单独的类,或者你有更好的建议吗?
  • 不。我对图层采取相同的路线。