【问题标题】:How to tell what's causing drawRect to be called?如何判断是什么导致 drawRect 被调用?
【发布时间】:2011-03-21 16:33:44
【问题描述】:

我的自定义 NSView 中有一堆自定义按钮,这些按钮作为子视图添加到 NSView 的 drawRect 方法中。

现在我发现在按下按钮后,父视图的 drawRect 会被重复调用。有时它只会在我退出应用程序时停止 - 我从 drawRect 中的一个简单日志语句中知道这一点。

现在我知道我的应用中可能存在更大的架构问题导致此问题,我该从哪里开始追踪导致此视图反复重绘的原因?

谢谢!

【问题讨论】:

    标签: cocoa debugging nsview


    【解决方案1】:

    首先,您不应该在drawRect: 中添加子视图。

    您是在做任何自定义绘图还是只是添加子视图?如果你不做任何绘图,你不应该实现drawRect:

    您想在initWithFrame: 中添加子视图,然后您想根据self.bounds 设置layoutSubviews 中的子视图的框架。

    如果您有任何问题,请随时提出。

    编辑:刚刚意识到您在询问 NSView 而不是 UIView。我从未使用过 NSView,但也许它们的工作方式类似。

    编辑 2: 我读了一些关于 NSView 的文章,但它似乎没有 layoutSubviews。也许您应该在drawRect: 中设置框架?我仍然很确定您不想在 drawRect: 中添加子视图。

    【讨论】:

    • 太好了,感谢您的回答 - 我没有意识到我在滥用 drawRect。我已将子视图的添加移出,并确保仅在必要时调用它,并且现在一切正常。
    猜你喜欢
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 2011-05-01
    相关资源
    最近更新 更多