我有一個CALayer的(imageLayer),以及用作對CALayer的(maskLayer)的掩膜的子類的CALayer。CALayer的setNeedsDisplayInRect - 什麼是InRect點?或更快的圖形中drawInContext
我用手指到maskLayer畫,這樣我可以暫時清除出imageLayer的一部分。
我通過保持一個位圖上下文(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
不看rect。我可以在RECT傳遞給drawInContext
,但我能做到這一點,只需setNeedsDisplay
。
setNeedsDisplayInRect
是否有setNeedsDisplay
不適用於CALayer?
(我知道,如果我使用drawRect
,將接受定義的矩形,而是一個CALayer的的drawInContext
沒有)
此外,有沒有用手指繪畫完成這個掩蔽沒有更好的辦法?主要的問題是CGContext上不是一個帆布和不記得以前的筆觸,讓他們有重新繪製所有的時間。
有趣的是,謝謝 - 我會重新審視它。 – Caroline 2011-08-03 04:05:53
非常感謝!我一直在試圖讓NSView執行CALayer設計的功能。現在,如果我可以用隱含的動畫清除問題,我就會變成金色的:) – Ash 2013-10-03 18:25:56