Iphone CALayer setNeedsDisplayInRect-InRect的意义是什么?或在drawInContext中更快地绘制

Iphone CALayer setNeedsDisplayInRect-InRect的意义是什么?或在drawInContext中更快地绘制,iphone,quartz-graphics,Iphone,Quartz Graphics,我有一个CALayer(imageLayer)和一个子类CALayer,它充当CALayer(maskLayer)上的掩码 我用手指在maskLayer上作画,这样我可以暂时擦除imageLayer的一部分 我通过保持一个位图上下文(maskContext)并在TouchsMoved中为其添加一个笔划来实现这一点。所以我的maskContext包含了我画的所有笔画。在TouchsMoved中,我执行[maskLayer设置需要显示] 在我的子类maskLayer中,我有drawInContext

我有一个CALayer(imageLayer)和一个子类CALayer,它充当CALayer(maskLayer)上的掩码

我用手指在maskLayer上作画,这样我可以暂时擦除imageLayer的一部分

我通过保持一个位图上下文(maskContext)并在TouchsMoved中为其添加一个笔划来实现这一点。所以我的maskContext包含了我画的所有笔画。在TouchsMoved中,我执行
[maskLayer设置需要显示]

在我的子类maskLayer中,我有
drawInContext
方法:

-(void)drawInContext:(CGContextRef)ctx
{
    CGImageRef image = CGBitmapContextCreateImage(maskContext);
    CGContextDrawImage(ctx, CGRectMake(0,0,self.frame.size.width, self.frame.size.height), image);
}
这一切都很好,但非常缓慢,因为它为每个TouchsMoved事件绘制了整个视图

我曾想过使用
[maskLayer setNeedsDisplayInRect:rect]
,但我想知道这有什么意义,因为
drawintext
不看rect。我可以将rect传递给
drawInContext
,但我可以通过
setNeedsDisplay
来实现

是否存在
setNeedsDisplayInRect
对于CALayer来说
setNeedsDisplay
不存在的问题

(我知道如果我使用的是
drawRect
,它将接受已定义的rect,但CALayer的
drawInContext
不接受)


还有,有没有更好的方法通过手指绘画来完成这种掩蔽?主要问题是CGContext不是画布,不记得以前的笔划,因此,它们必须一直被重新绘制。

如果您通过调用
setNeedsDisplayInRect:
来标记要显示的图层,那么您可以使用
cgcontextgetclipboondingbox
绘图文本:
中标记要显示的区域,非常感谢!我一直在尝试让NSView执行CALayer设计的功能。现在,如果我能解决隐式动画的问题,我将获得金牌:)