似乎在UIView上调用[self setNeedsDisplay]
不会导致a
[self.layer setNeedsDisplay]
。如果我按如下方式覆盖setNeedsDisplay
,那就没关系了:
- (void)setNeedsDisplay {
[super setNeedsDisplay];
[self.layer setNeedsDisplay];
}
这会让我遇到麻烦吗?也许有更好的方法? 谢谢
答案 0 :(得分:3)
我将此作为对另一个答案的评论发布,但这可能对其他人有所帮助。
当实现setNeedsDisplay
时,UIView仅在其底层CALayer上调用drawRect:
(即使该方法为空且什么都不做)。这告诉UIView的setNeedsDisplay
它的图层也有一些要完成的绘图。
另一种自动调用图层setNeedsDisplay
的方法是将图层的标志needsDisplayOnBoundsChange
设置为true,只要视图的边界发生变化(自动更改),就会触发setNeedsDisplay
图层的边界)。但是要回答你的问题,如果你没有覆盖drawRect:
,你正在做的事情很好,否则它是多余的。
答案 1 :(得分:1)
我不明白为什么它会让你陷入困境。 setNeedsDisplay
/ setNeedsLayout
只标记需要显示/布置视图/图层。它将在下一次运行循环时进行绘图。
我很惊讶,虽然在视图上调用它并不会导致它在图层上发生,因为毕竟UIView
及其关联的CALayer
非常紧密集成。
总的来说,如果你发现它只是在视图上调用setNeedsDisplay
而找不到它,那么就去找你的解决方案吧。我不知道它会如何伤害任何东西。