我有一个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
的绘图移动到一个单独的对象来解决了这个问题,但是这迫使我在这个对象中设置模型的指针,并复制其他参数。
所以我的问题是:在UIView中使用drawRect绘制其内容,如何添加一个委托的子层是同一个UIView?
答案 0 :(得分:1)
您需要将UIView子类化,并在该子类中使用您自己的CALayer子类覆盖+ (Class)layerClass
。然后,UIView将在创建其后备层时使用该子类。然后,您的CALayer子类将覆盖drawLayer
。
您可以将此CALayer子类(接口和实现)放在UIView子类中。