Iphone CALayer setNeedsDisplayInRect-InRect的意义是什么?或在drawInContext中更快地绘制
我有一个CALayer(imageLayer)和一个子类CALayer,它充当CALayer(maskLayer)上的掩码 我用手指在maskLayer上作画,这样我可以暂时擦除imageLayer的一部分 我通过保持一个位图上下文(maskContext)并在TouchsMoved中为其添加一个笔划来实现这一点。所以我的maskContext包含了我画的所有笔画。在TouchsMoved中,我执行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
[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设计的功能。现在,如果我能解决隐式动画的问题,我将获得金牌:)