根据我的理解,setNeedsDisplay
只影响它所要求的视图。是否有一种简单的方法可以说“以递归方式更新此视图及其所有子视图?”
回应评论,这是我的情况:我有一个自定义视图
@interface ContainerView : UIView
此视图不实施drawRect
。在我的xib中有一个container
的实例(称为ContainerView
),其中添加了一些(自定义)子视图。在代码中我说
[container setNeedsDisplay]
我希望这些子视图能够更新。我哪里错了?
答案 0 :(得分:0)
好的,UIView在首次展示时自我画出。 CALayers没有。在UIView上调用setNeedsDisplay会将其标记为脏,这会自动重绘所有子视图(在所有子视图上调用drawrect)。在CALayer上调用setNeedsDisplay没有相同的效果,它不会重绘子图层。希望这会有所帮助。
此致
参考
iOS 7编程推动极限Rob Napier,Mugunth Kumar
答案 1 :(得分:-1)
UIView类在屏幕上定义了一个矩形区域,以及用于管理该区域内容的接口。在运行时,视图对象处理其区域中任何内容的呈现,并处理与该内容的任何交互
setNeedsDisplay
将接收者的整个边界矩形标记为需要重绘 注意:如果您的视图由CAEAGLLayer对象支持,则此方法无效。它仅适用于使用本机绘图技术(如UIKit和Core Graphics)的视图来呈现其内容。
子视图位于视图的边界内,因此视图将询问子视图显示的内容。
您是否尝试过遇到一些再次出现此定义的案例?
如果您要实现自己的UIView子类,则需要自己处理drawRect: