如何在UIView的实现文件中实现drawLayer:InContext?

时间:2013-06-19 20:41:27

标签: ios core-graphics

我有一个UIView,我在drawRect方法中绘制东西。我想在一个UIView CALayer(self.layer)上叠加一个CALayer,它将绘制我在drawRect中绘制的东西的一部分。基本上,我在drawRect中绘制了很多圆圈,我想在叠加层上突出显示它们。我从模型对象中获取圆的坐标,该模型对象是UIView的属性。

我的第一次尝试是将子层s添加到UIView层,将其委托设置为UIView并在需要时调用其setNeedsDisplay方法,但两个层都调用drawLayer:InContexts和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的绘图移动到一个单独的对象来解决了这个问题,但是这迫使我在这个对象中设置模型的指针,并复制其他参数。

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

1 个答案:

答案 0 :(得分:1)

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

您可以将此CALayer子类(接口和实现)放在UIView子类中。