我有一个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不是画布而且不记得以前的笔画,所以必须一直重绘它们。
答案 0 :(得分:2)
如果您通过调用setNeedsDisplayInRect:
标记要显示的图层,则可以使用CGContextGetClipBoundingBox
来标记要在drawInContext:
中显示的区域。