我在UIGraphicsGetImageFromCurrentContext
内使用drawRect
并将子视图的属性设置为返回的UIImage
。这最终会在子视图中触发setNeedsDisplay
。
这有副作用吗?
基本上,如果在superview的drawRect
方法中调用setNeedsDisplay
,子视图是否会始终调用其drawRect
方法?或者子视图是否会被视为“已经显示”,这意味着不会进行更新?
答案 0 :(得分:1)
来自邮件列表:http://lists.apple.com/archives/Cocoa-dev/2005/Jul/msg01697.html
如果从drawRect:中调用setNeedsDisplay:,将设置该标志,但只要drawRect:返回,它将再次被清除。因此,当时间到达时,标志清除,并且不再调用drawRect:
-drawRect只能用于绘图。绝对不应在drawRect:中完成调整大小,重新定位以及添加或删除子视图。可能会导致不正确的行为。 AppKit合理地依赖于视图层次结构在绘制视图层次结构的过程中保持不变。
此外,不要在drawRect中调用-display或variants或-drawRect:或者您邀请无限递归并崩溃。
上面的代码片段正在回答这个问题:http://lists.apple.com/archives/Cocoa-dev/2005/Jul/msg01693.html
概述
我有一个管理多个子视图的NSView(viewA)。这个观点是 drawRect包含用于定位和调整其所有子视图的代码 相应地调用每个子视图的setNeedsDisplay:YES 方法。其中一个子视图也是NSView(viewB),它也是 有多个子视图。
问题
如果调整包含viewA的窗口,则调用viewA的drawRect方法 被调用,但由于某些未知原因,viewB的drawRect方法是 尽管是viewA的drawRect方法,但并不总是被调用 调用viewB的setNeedsDisplay:YES方法。 drawRect方法 与所有viewA相关联的其他子视图虽然被调用。
问题
任何人都可以建议为什么viewB的drawRect方法是 在superview发送setNeedsDisplay之后并不总是被调用 信息?任何关于我做错事的想法都会受到赞赏。