我需要在子类UIView中逐步绘制,但每次调用[self setNeedsDisplay]
时都会清除视图。
我这样做:
- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
self.clearsContextBeforeDrawing = FALSE;
}
return self;
}
我错过了什么吗?如何阻止UIView
清除?
答案 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的内容。