【问题标题】:iPhone - UIView adding a subView vs drawRect?iPhone - UIView 添加 subView vs drawRect?
【发布时间】:2012-01-12 21:30:17
【问题描述】:

将视图添加为子视图与在该视图的 drawRect 方法中绘制视图有什么区别?

我使用这两种方法,但我想知道除了显而易见的之外,如果你在 drawRect 中这样做,它将是一个视图,而不是两个视图,或者添加为子视图更容易。是否有任何特定情况下您绝对应该使用其中一种?

【问题讨论】:

    标签: iphone objective-c uiview subview drawrect


    【解决方案1】:

    覆盖-drawRect: 可能是绘制复杂UITableViewCells 的好方法。将所有子视图合成并绘制为一个视图有助于极大地提高表格视图的滚动性能。

    话虽如此,我通常会坚持使用可用的最高级别 API,只有在性能受到影响时才降级到较低级别。

    【讨论】:

    • 谢谢。在我的应用程序中,单元格可以有很多子视图(没有限制,但通常在 5 到 20 个之间),据报道,使用 3GS 时它并不是很流畅。现在我知道为什么了!
    • 如果这些子视图有任何 alpha,那将是一个大问题。 GPU 确实在努力尝试在 1/60 秒内完成每一帧的所有合成。如果绘图未及时完成,则会丢弃该帧,从而导致性能不稳定。
    • 子视图是带有渐变背景的自定义标签,我不调整不透明度。但是,可能来自那个
    【解决方案2】:

    正如您所指出的,添加子视图更容易,我真的认为这在 90% 的情况下都没有竞争。您通常应该添加一个子视图并让库处理在正确位置绘制子视图。

    我只使用-drawRect:在我的视图中完成自定义绘图,而不是绘制子视图,它会产生不必要的复杂性。如果您需要很多性能,-drawRect: 可以帮助您。此外,在简单绘图的情况下,-drawRect: 非常好,而不是制作几个子视图。但总的来说,只需添加一个子视图即可。

    如果将来您决定希望这些子视图接收触摸事件或以交互方式处理事物,那么重构您的 -drawRect: 代码会更加困难。

    【讨论】:

      猜你喜欢
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多