使用drawRect进行自定义渲染时,我负责裁剪吗?

时间:2009-02-24 20:17:20

标签: iphone cocoa-touch

当我在setNeedsDisplayInRect上拨打UIView并且drawRect:方法触发时,我是否有责任确保我不会渲染我所呼叫的CGRect之外的内容,或者框架处理对我来说?

示例:

-(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 个答案:

答案 0 :(得分:3)

简化Barry所说的:是的,框架将为您处理。

您可以放心地忽略矩形,您在其外部绘制的任何内容都将被忽略。

另一方面,如果你在rect之外画画,你就是在浪费CPU时间,所以如果你可以根据矩形来限制你的绘画,你应该这样做。

答案 1 :(得分:2)

框架将剪裁您的绘图。在OS X(AppKit)上,绘图被剪切到NSView的脏区域(从10.3开始)。我不确定UIKit中的确切剪切算法是什么。当然,您可以通过检查需要绘制的内容并仅在视图的脏区域中绘制来加速绘制,而不是依赖于框架来剪切不必要的绘图。