UIView setNeedsDisplay调用CALayer的setNeedsDisplay?

时间:2012-01-14 22:11:34

标签: objective-c ios core-animation

似乎在UIView上调用[self setNeedsDisplay]不会导致a [self.layer setNeedsDisplay]。如果我按如下方式覆盖setNeedsDisplay,那就没关系了:

- (void)setNeedsDisplay {
  [super setNeedsDisplay];
  [self.layer setNeedsDisplay];
}

这会让我遇到麻烦吗?也许有更好的方法? 谢谢

2 个答案:

答案 0 :(得分:3)

我将此作为对另一个答案的评论发布,但这可能对其他人有所帮助。

当实现setNeedsDisplay时,UIView仅在其底层CALayer上调用drawRect:(即使该方法为空且什么都不做)。这告诉UIView的setNeedsDisplay它的图层也有一些要完成的绘图。

另一种自动调用图层setNeedsDisplay的方法是将图层的标志needsDisplayOnBoundsChange设置为true,只要视图的边界发生变化(自动更改),就会触发setNeedsDisplay图层的边界)。但是要回答你的问题,如果你没有覆盖drawRect:,你正在做的事情很好,否则它是多余的。

答案 1 :(得分:1)

我不明白为什么它会让你陷入困境。 setNeedsDisplay / setNeedsLayout只标记需要显示/布置视图/图层。它将在下一次运行循环时进行绘图。

我很惊讶,虽然在视图上调用它并不会导致它在图层上发生,因为毕竟UIView及其关联的CALayer非常紧密集成。

总的来说,如果你发现它只是在视图上调用setNeedsDisplay而找不到它,那么就去找你的解决方案吧。我不知道它会如何伤害任何东西。