调用 setFrame 时不调用 drawRect

Posted

技术标签:

【中文标题】调用 setFrame 时不调用 drawRect【英文标题】:Not calling drawRect when setFrame is called 【发布时间】:2014-12-19 05:11:57 【问题描述】:

我注意到,当在 UIView 上设置框架时,UIView 会调用 setNeedsDisplay,而 UIView 又会调用 drawRect。我注意到即使我将 contentMode 设置为 Center、ScaleAspectFit、ScaleToFill 也是如此。我希望仅在框架更改时调用 drawRect 一次。这可能吗/是否有启用此功能的 contentMode?​​p>

【问题讨论】:

【参考方案1】:

调用drawRect: 与您无关。您对此感到担忧的事实就是问题所在。系统会在需要调用时调用它。你的工作是在每次调用它时进行绘制。如果你正确地实现了drawRect:,那根本就不是问题。这是一个框架。它做它的工作,你做你的工作。

【讨论】:

我的 drawRect 是为了做正确的事而写的。我担心这是 CPU 限制,我想尽可能减少它。 你了解ios绘图系统吗?您是否意识到它考虑在 every 运行循环结束时重绘?您知道 CATransaction 以及提交每个事务时会发生什么吗?绘画没有某种“负担”。运行时知道何时绘制。当您的代码运行时,实际上不会发生任何绘图。别担心,开心就好。

以上是关于调用 setFrame 时不调用 drawRect的主要内容,如果未能解决你的问题,请参考以下文章

连续调用几个 [UIVIew setFrame:] 并不会全部执行

在 iOS 上,setNeedsDisplay 真的不会导致 drawRect 被调用...除非 CALayer 的 display 或 drawInContext 最终调用 drawRect?

iOS drawRect的作用和调用机制

如果我经常调用 setneedsdisplay,drawrect 多久会被调用一次?这是为啥?

-setNeedsDisplay 没有被调用来刷新 drawRect

UIView 在后台调用 drawRect