2009-02-24 29 views
3

當我打電話setNeedsDisplayInRectUIView,和drawRect:方法觸發,我負責確保我沒有呈現超出我調用的CGRect之外的東西,還是框架將爲我處理?使用drawRect進行自定義渲染時,我是否負責裁剪:?

例子:

-(void)drawRect:(CGRect)rect 
{ 
    //assume this is called through someMethod below 
    CGContextRef ctx = UIGraphicsGetCurrentContext();  
    [[UIColor redColor] setFill]; 
    CGContextFillRect(ctx, rect); 
    [[UIColor blueColor] setFill]; 
    // is this following line a no-op? or should I check to make sure the rect 
    // I am making is contained within the rect that is passed in? 
    CGContextFillRect(ctx, CGRectMake(100.0f, 100.0f, 25.0f, 25.0f));  
} 

-(void)someMethod 
{ 
    [self setNeedsDisplayInRect:CGRectMake(50.0f, 50.0f, 25.0f, 25.0f)]; 
} 

回答

2

框架將剪輯繪圖。在OS X(AppKit)上,繪圖被裁剪到NSView的髒區域(截至10.3)。我不確定UIKit中的精確剪裁算法是什麼。當然,您可以通過檢查需要繪製的內容並只繪製視圖的髒區域來加速繪製,而不是依靠框架來裁剪不必要的繪圖。

3

爲了簡化巴里所說的話:是的,框架將爲您處理。

您可以放心地忽略該矩形,任何您在其外部繪製的內容都將被忽略。另一方面,如果你在矩形的外面畫畫,你正在浪費CPU時間,所以如果你可以根據矩形限制你的繪畫,你應該這樣做。