CALayer setNeedsDisplayInRect - InRect的重点是什么?或者在drawInContext中快速绘制

时间:2011-03-04 13:46:00

标签: iphone quartz-graphics

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

我用手指在maskLayer上绘画,这样我就可以暂时删除部分图像层。

我通过保留一个Bitmap Context(maskContext)并在touchesMoved中为它添加笔划来实现这一点。所以我的maskContext只保存了我画过的所有笔画。在touchesMoved中,我做[maskLayer setNeedsDisplay];

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

-(void)drawInContext:(CGContextRef)ctx
{
    CGImageRef image = CGBitmapContextCreateImage(maskContext);
    CGContextDrawImage(ctx, CGRectMake(0,0,self.frame.size.width, self.frame.size.height), image);
}

这一切都很好,但是因为它为每个touchesMoved事件绘制了整个视图,所以非常慢。

我想过使用[maskLayer setNeedsDisplayInRect:rect],但我想知道重点是什么,因为drawInContext没有看到矩形。我可以将矩形传递给drawInContext,但我只能使用setNeedsDisplay

setNeedsDisplayInRect是否有setNeedsDisplay对CALayer不具备的内容?

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

另外,有没有更好的方法通过用手指画画来实现这种遮蔽?主要问题是CGContext不是画布而且不记得以前的笔画,所以必须一直重绘它们。

1 个答案:

答案 0 :(得分:2)

如果您通过调用setNeedsDisplayInRect:标记要显示的图层,则可以使用CGContextGetClipBoundingBox来标记要在drawInContext:中显示的区域。