0

我有一个 UIView,我在其中使用 drawRect 方法绘制东西。我想在 UIView CALayer (self.layer) 上覆盖一个 CALayer,它会绘制我在 drawRect 中绘制的东西的一个子集。基本上,我在drawRect中画了很多圆圈,我想在叠加层上突出显示它们。我从作为 UIView 属性的模型对象获取圆的坐标。

我的第一次尝试是将子层添加s到 UIView 层,将其委托设置为 UIView 并setNeedsDisplay在需要时调用其方法,但 drawLayer:InContext由两个层(s和 self.layer)调用。这不起作用:

-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
    if (layer == s ) {
    // draw stuffs for s
    }
    else if (layer==self.layer) {
    // do nothing
    }
}

导致黑色 UIView。我想s从可以访问我的数据模型的地方以及对绘图有用的其他变量(线条的宽度......)进行绘制。我已经通过将绘图移动s到一个单独的对象解决了这个问题,但这迫使我还要在这个对象中设置模型的指针,并复制其他参数。

所以我的问题是:在使用 drawRect 绘制其内容的 UIView 中,如何添加一个代表相同 UIView 的子层?

4

1 回答 1

1

您需要继承 UIView 并在该子类中+ (Class)layerClass使用您自己的 CALayer 子类覆盖。然后,该 UIView 在创建其支持层时将使用该子类。然后,您的 CALayer 子类将覆盖drawLayer.

你可以把这个 CALayer 子类(接口和实现)放在你的 UIView 子类中。

于 2013-06-19T22:34:48.077 回答