2012-07-07 120 views
1

我有一个UIView和drawRect()绘制它的内容,但我需要有时调整视图大小取决于一些计算是在拉丝过程中完成的:调整尺寸的UIView

当我改变大小,绘制接缝以缩放,而不是使用从调整大小获得的额外大小。

这是我如何调整形式drawRect()

CGRect limits = self.frame ; 
limits.size.width = 400; 
self.frame = limits; 

它接缝像上下文不知道调整大小和使用旧规格的图纸。调整大小后我已经尝试[self setNeedsDisplay],但不再调用绘制方法。

回答

1

计算应该提前完成,而不是在绘图过程中进行,因为单独的性能原因(尽管早期计算也会避免此问题)。

例如,如果你的计算取决于多种因素,XYZ,安排重做每当有变化XYZ这些计算。必要时缓存计算结果,并在此时调整视图框架大小。 drawRect:实施应该只绘制到它给出的区域。

0

对于任何人都在挣扎。

显然[self setNeedsDisplay]如果从drawRect调用(或从drawRect调用的任何方法:)将不会产生任何效果。为什么它只是跳过电话。

使事情发生使用以下代替

[self performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0]; 

将其称为权当主队列再次空闲;只要确保使用一些条件来调用drawRect中的needsDisplay条件 - 否则你将会循环。