在UIView上调用[self setNeedsDisplay]似乎不会产生[self.layer setNeedsDisplay]。我是否可以覆盖setNeedsDisplay,如下所示:
- (void)setNeedsDisplay {
[super setNeedsDisplay];
[self.layer setNeedsDisplay];
}这会给我带来麻烦吗?也许有更好的方法?谢谢
发布于 2013-06-18 09:17:43
我把这篇文章作为对另一个答案的评论,但这可能对其他人有帮助。
UIView仅在实现了setNeedsDisplay时才在其底层CALayer上调用drawRect: (即使该方法为空且不执行任何操作)。这告诉UIView的setNeedsDisplay,它的层也有一些绘制要完成。
让层的setNeedsDisplay被自动调用的另一种方法是将层的标志needsDisplayOnBoundsChange设置为true,这将在视图的边界发生变化时触发setNeedsDisplay (这会自动改变层的边界)。但是为了回答您的问题,如果您没有覆盖drawRect:,那么您所做的一切都是很好的,否则就是多余的。
发布于 2012-01-15 07:35:53
我不明白为什么这会给你带来麻烦。setNeedsDisplay / setNeedsLayout只是标记视图/层需要显示/布局。它将在下一次执行run循环时执行绘图。
尽管我很惊讶在视图上调用它并不会导致它在层上发生,因为毕竟UIView和它关联的CALayer是紧密集成在一起的。
所以总体而言,是的,如果你发现在视图上调用setNeedsDisplay对你不起作用,那么就去找你的解决方案。我看不出这会有什么坏处。
https://stackoverflow.com/questions/8865757
复制相似问题