【问题标题】:When is 'drawRect' called?什么时候调用'drawRect'?
【发布时间】:2010-03-15 21:32:30
【问题描述】:

我在drawRect 中有一些自定义绘图代码,它还执行一些尺寸计算。

最早何时可以确定此代码已加载,例如如果我想相应地修改它的容器大小?

【问题讨论】:

    标签: iphone objective-c cocoa cocoa-touch uikit


    【解决方案1】:

    -[NSView viewWillDraw] 是最后一分钟布局的合理位置。

    【讨论】:

    • 我认为他的意思是 viewWillAppear - 每次视图出现时都会发生这种情况。 viewWillDisappear 是对应的退出函数。
    • 但不会在 'draw' 之前调用 'willAppear' 吗?
    • viewWillAppearviewWillAppear 仅在 UIViewController 上调用。如果您的视图不是由视图控制器管理的,您将无法获得这些方法。
    • 对不起,我的意思是我说的,但没有注意到这是针对 iPhone 的。
    • 另外,是的,听起来viewWillAppear 可能是一个很好的地方。我们建议您将代码 移出 drawRect。你真的应该在绘图之前做好布局。
    【解决方案2】:

    我在 drawRect 中有一些自定义绘图代码,它还执行一些尺寸计算。

    最早何时可以确定此代码已加载,例如如果我想相应地修改它的容器大小?

    一个对象在其类完全加载之前不能存在。如果你有一个实例,那么它是一个实例的类是完全加载的,因为如果没有,你就没有它的实例。

    至于何时调用:需要绘制时调用。这通常作为事件循环的一部分发生,如果有任何东西将视图标记为需要显示。可以直接告诉 NSView 显示,但据我所知,这对于 UIView 是不可能的。

    因此,如果您需要在它被告知之前对其执行某些操作,请在创建后立即执行此操作,或者,如果您要将视图设置为需要显示,请在执行此操作之前执行此操作。

    【讨论】:

      【解决方案3】:

      就在视图显示之前或调用时

      [aView setNeedsDisplay];
      

      【讨论】:

      • 但是现阶段有回调吗?
      • 不,你必须自己在 drawRect 方法中添加一些东西。
      【解决方案4】:

      我刚刚创建了我的第一个 customView 应用。这是我的问题之一。我的 drawRect 方法在创建我的窗口(或重新创建)时被调用一次。以及调整我的窗口大小时的数百万次。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-25
        • 1970-01-01
        • 2014-03-27
        • 2010-10-18
        • 2016-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多