1

我有一个 UIView 并从中绘制其内容drawRect(),但有时我需要根据绘制期间完成的一些计算来调整视图的大小:

当我更改大小时,绘图会按比例缩小,而不是使用从调整大小获得的额外大小。

这就是我调整表格大小的方式drawRect()

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

它看起来像上下文不知道调整大小并且正在使用旧尺寸进行绘制。调整大小后我已经尝试[self setNeedsDisplay]过,但不会再次调用 draw 方法。

4

2 回答 2

1

计算应该提前完成,而不是在绘图期间完成,仅出于性能原因(尽管早期计算也可以避免这个问题)。

例如,如果您的计算取决于因素和X,则安排在或发生更改时重做这些计算。如有必要,缓存计算结果,并在那时调整视图框架的大小。实现应该只进入它给定的区域。YZXYZdrawRect:

于 2012-07-07T06:20:13.327 回答
0

对于任何为此苦苦挣扎的人。

显然 [self setNeedsDisplay] 如果从 drawRect 调用:(或从 drawRect 调用的任何方法:)将没有任何效果。不知何故,它只是跳过了通话。

为了使事情发生,请改用以下

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

当主队列再次空闲时,这将被正确调用;只需确保在 drawRect 内部使用一些条件来调用 needsDisplay - 否则您将陷入循环。

于 2013-02-04T13:16:33.390 回答