setNeedsDisplay和subviews

时间:2012-01-03 20:40:11

标签: objective-c ios cocoa-touch

根据我的理解,setNeedsDisplay只影响它所要求的视图。是否有一种简单的方法可以说“以递归方式更新此视图及其所有子视图?”

回应评论,这是我的情况:我有一个自定义视图

@interface ContainerView : UIView

此视图实施drawRect。在我的xib中有一个container的实例(称为ContainerView),其中添加了一些(自定义)子视图。在代码中我说

[container setNeedsDisplay]

我希望这些子视图能够更新。我哪里错了?

2 个答案:

答案 0 :(得分:0)

好的,UIView在首次展示时自我画出。 CALayers没有。在UIView上调用setNeedsDisplay会将其标记为脏,这会自动重绘所有子视图(在所有子视图上调用drawrect)。在CALayer上调用setNeedsDisplay没有相同的效果,它不会重绘子图层。希望这会有所帮助。

此致

参考
iOS 7编程推动极限Rob Napier,Mugunth Kumar

答案 1 :(得分:-1)

UIView Class Reference

  

UIView类在屏幕上定义了一个矩形区域,以及用于管理该区域内容的接口。在运行时,视图对象处理其区域中任何内容的呈现,并处理与该内容的任何交互

     

setNeedsDisplay
  将接收者的整个边界矩形标记为需要重绘   注意:如果您的视图由CAEAGLLayer对象支持,则此方法无效。它仅适用于使用本机绘图技术(如UIKit和Core Graphics)的视图来呈现其内容。

子视图位于视图的边界内,因此视图将询问子视图显示的内容。
您是否尝试过遇到一些再次出现此定义的案例? 如果您要实现自己的UIView子类,则需要自己处理drawRect:

中的所有显示