在一个视图中处理多个 CALayer 的绘图



我想实现一个有两层的视图。然后我想在按下一些按钮时分别在这些层上绘制一些图形。

我已经实现了委托方法:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context

但问题是,这个委托只使用[myviewclass setNeedsDisplay]方法(而不是[mylayer setNeedsDisplay])激发,然后drawLayer总是被视图的根层调用。

我希望它被调用为mylayer和精确的context,这样我就可以使用它的上下文在特定的图层上绘制。

请帮助如何实现这一点。

必须设置层的委托并在其中实现委托方法drawLayer:inContext:。否则,层无法确定必须在哪个对象中调用该方法。

此外,层的委托不能是UIView,因此必须使用其他内容作为委托。

例如,可以将视图控制器用作图层的代理。首先,在视图控制器中实现方法drawLayer:inContext:。然后,将视图控制器设置为层的代理。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // ...
    self.view.layer1.delegate = self;
    self.view.layer2.delegate = self;
}
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
    if (layer == self.view.layer1) {
        // ...
    } else if (layer == self.view.layer2) {
        // ..
    }
}

最新更新