【问题标题】:Is it safe to call [subview setNeedsDisplay] inside [superview drawRect:]?在 [superview drawRect:] 中调用 [subview setNeedsDisplay] 是否安全?
【发布时间】:2016-12-22 22:14:24
【问题描述】:

我在drawRect 中使用UIGraphicsGetImageFromCurrentContext,并将子视图的属性设置为返回的UIImage。这最终会在子视图中触发setNeedsDisplay

这会有副作用吗?

基本上,如果在父视图的drawRect 方法中调用setNeedsDisplay,子视图是否总是调用其drawRect 方法?或者子视图会被认为“已经显示”,这意味着不会发生更新?

【问题讨论】:

    标签: ios uiview uikit drawrect


    【解决方案1】:

    来自邮件列表:http://lists.apple.com/archives/Cocoa-dev/2005/Jul/msg01697.html

    如果你从 drawRect: 中调用 setNeedsDisplay:,标志将被设置,但一旦 drawRect: 返回,它就会再次被清除。因此,时间到了,flag就清零了,drawRect:不再调用了。

    -drawRect 应该只用于绘图。绝对不应该在 drawRect: 中调整大小、重新定位以及添加或删除子视图。可能会导致不正确的行为。 AppKit 合理地依赖于在绘制视图层次结构的中间时保持不变的视图层次结构。

    此外,不要在 drawRect: 中调用 -display 或 variables 或 -drawRect: 否则会导致无限递归和崩溃。

     

    上面的sn-p正在回答这个问题: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 方法是 在其超级视图向其发送 setNeedsDisplay 后并不总是调用 信息?任何关于我做错了什么的想法都将不胜感激。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多