Рисование графиков на iOS: использовать слои или переопределить drawRect?

Читая документацию, мне не ясно, подходит ли переопределение drawRect UIView или использование слоев.

Я собираюсь отображать два вида графиков. Линейный график и гистограмма с одной гистограммой. Оба будут иметь галочки вдоль оси и текст, выровненный по галочкам. Ниже я показываю только четыре тика на ось, но их может быть больше.

  1. Как лучше рисовать галочки? Должен ли я использовать отдельный слой для каждого тика или визуализировать их все сразу в отдельном представлении с помощью drawRect?

  2. Есть ли другой способ отобразить текст, кроме использования отдельного UILabel для каждого?

  3. Для гистограммы я использую CAGradientLayer для гистограммы. Для линейного графика возможно ли отобразить это с помощью слоев?

Пример графика

введите здесь описание изображения


person Brian    schedule 07.08.2012    source источник
comment
На WWDC есть доклад, в котором обсуждаются графики в Stocks.app. Он называется «Практическое рисование для разработчиков iOS» и создан на WWDC 2011.   -  person Benedict Cohen    schedule 07.08.2012
comment
Вы также можете просмотреть CAShapeLayer для линейного графика.   -  person David Rönnqvist    schedule 07.08.2012
comment
@DavidRönnqvist CAShapeLayer выглядит именно так, как мне нужно. Из того, что я читал, CALayer очень оптимизирован и имеет всевозможные преимущества для создания анимации, поэтому рендеринг вручную не имеет смысла, если вы не можете сделать это с помощью CALayer.   -  person Brian    schedule 07.08.2012
comment
Ссылка из предложения Бенедикта: developer.apple.com/videos/wwdc/2011. Не распространяется на CALayer, только на Quartz/Core Graphics.   -  person Brian    schedule 07.08.2012
comment
Если вам нужен пример для работы, мы создали основной сюжет: code.google.com/p. /core-plot из иерархии CALayers, чтобы перерисовывались только те элементы, которые необходимо изменить. Еще многое можно сделать для улучшения производительности рендеринга, но именно так мы все и структурировали. Вы хотите свести к минимуму количество рисунков Quartz, которые вы делаете при обновлении графика, потому что это довольно дорого, а композитинг CALayers очень дешев.   -  person Brad Larson    schedule 10.08.2012


Ответы (1)


В конце концов, я использовал комбинацию переопределения drawRect и CALayer/CAShapeLayer. Пройдя через процесс реализации всего этого с нуля, я бы выбрал формы и слои.

Подход с формами и слоями достаточно эффективен и является более надежным решением. В конце концов, если вы делаете такие вещи, как анимация, требуется меньше кода.

person Brian    schedule 18.10.2012