【问题标题】:Drawing graphs on iOS: Use layers or override drawRect?在 iOS 上绘制图形:使用图层还是覆盖 drawRect?
【发布时间】:2012-08-04 18:05:54
【问题描述】:

阅读文档后,我不清楚覆盖 UIView 的 drawRect 或使用图层是否合适。

我将渲染两种图形。折线图和单条条形图。两者都会有沿轴的刻度和与刻度对齐的文本。下面我只显示每个轴的四个刻度,但可能还有更多。

  1. 绘制刻度的更好方法是什么?我应该为每个刻度使用单独的图层,还是使用 drawRect 在单独的视图上一次渲染它们?

  2. 除了使用单独的 UILabel 之外,还有其他方法可以呈现文本吗?

  3. 对于条形图,我使用 CAGradientLayer 作为条形图。对于折线图,甚至可以使用图层来渲染它吗?

示例图

【问题讨论】:

  • 有一个 WWDC 演讲讨论了 Stocks.app 中的图表。它被称为 iOS 开发者实用绘图,来自 WWDC 2011。
  • 折线图也可以看CAShapeLayer。
  • @DavidRönnqvist CAShapeLayer 看起来正是我所需要的。根据我的阅读,CALayer 是高度优化的,并且具有各种用于制作动画的好东西,除非您不能使用 CALayer 来制作动画,否则手动渲染是没有意义的。
  • 本尼迪克特建议的链接:developer.apple.com/videos/wwdc/2011。不包括 CALayer,只包括 Quartz/Core Graphics。
  • 如果您想要一个示例,我们在 CALayers 的层次结构中构建了 Core Plot:code.google.com/p/core-plot,以便仅重绘需要更改的元素。仍然可以做很多事情来提高我们的渲染性能,但这就是我们构建事物的方式。您希望在更新绘图时尽量减少 Quartz 绘图的数量,因为它相当昂贵并且合成 CALayers 非常便宜。

标签: iphone ios ipad calayer drawrect


【解决方案1】:

最后,我使用了覆盖drawRect 和CALayer/CAShapeLayer 的组合。现在已经完成了从头开始实现这一切的过程,我将使用形状和图层。

形状和层的方法非常高效,并且是一种更强大的解决方案。最后,如果你在做动画之类的事情,它需要更少的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    相关资源
    最近更新 更多