如何在绘制之前不清除上下文

时间:2011-11-29 02:24:48

标签: iphone uiview

我需要在子类UIView中逐步绘制,但每次调用[self setNeedsDisplay]时都会清除视图。

我这样做:

- (id)initWithCoder:(NSCoder *)aDecoder {
    if ((self = [super initWithCoder:aDecoder])) {
        self.clearsContextBeforeDrawing = FALSE;
    }
    return self;
}

我错过了什么吗?如何阻止UIView清除?

2 个答案:

答案 0 :(得分:3)

如果你调用setNeedsDisplay,它将使用完整的边界调用drawRect。

如果您要逐步绘制(部分视图),则需要调用:

[self setNeedsDisplayInRect:rect];

当然这意味着你的drawRect需要能够只处理绘制视图的一部分。

此处有更多信息:Drawing incrementally in a UIView (iPhone)

此外,您将其设置为FALSE,它在objective-c中通常为NO。一个在编译时解析为0,另一个解析为(BOOL)0。有点奇怪,但没有引起问题:

Is there a difference between YES/NO,TRUE/FALSE and true/false in objective-c?

答案 1 :(得分:3)

对不起。

drawRect:不保证使用常规UIView的任何先前绘图的已保存内容。帧缓冲可能位于GPU的不透明路径后面,可以认为是基本上只写。因此,如果为常规UIView实现drawRect,则必须能够重新创建整个视图。

但是如果你创建自己的位图绘制上下文,你可以绘制到另一个上下文,包括以前的图形内容,并绘制到该上下文而不是UIView。然后,您可以将该位图上下文转换为图像,并将该图像显示为UIView的CALayer的内容。