我在研究CALayers时看到了solution。我正在寻找一种在具有多个子层的UIView中实现自定义绘图的方法。我将这个子图层命名为:
layer1.name = @"Back";
layer2.name = @"Middle";
layer3.name = @"Front";
我创建了由这些图层实现的自定义方法
-(void)drawBackLayer:(CALayer *)layer inContext:(CGContextRef)ctx
-(void)drawMiddleLayer:(CALayer *)layer inContext:(CGContextRef)ctx
-(void)drawFrontLayer:(CALayer *)layer inContext:(CGContextRef)ctx
问题是没有实现这些方法,而是由视图的根层使用的drawLayer:inContext:
实现了四次。这意味着自定义图层实现此方法而不是自定义方法。任何人都可以向我解释原因吗?
注意:我在链接中提到的解决方案是Dave Lee提供的代码。
答案 0 :(得分:2)
UIView使用的图层必须是实现这些消息的自定义CALayer。使UIView子类使用特定图层的方法是通过类方法“+(Class)layerClass”。
所以: - 子类UIView(或其子类,如UIImageView等) - 实现layerClass方法,并返回[MyCALayer class];
现在该视图将使用您的CALayer子类。