Хорошая стратегия для создания столбчатой диаграммы с функцией касания для просмотра значений?

#iphone #objective-c #design-patterns #bar-chart

#iPhone #objective-c #шаблоны проектирования #столбчатая диаграмма

Вопрос:

Я хочу создать диаграмму столбчатой диаграммы. У меня уже есть компонент диаграммы, мне просто нужно адаптировать его к столбчатой диаграмме. При касании одной из полос значение shold отображается в уменьшенном виде.

Как я вижу, здесь можно применить несколько разных стратегий. Что я хочу знать, так это какую стратегию мне следует использовать? Любая из этих или, возможно, есть другие идеи получше?:

  1. Bar — это UIButton.
  2. Bar — это пользовательский образ с поддержкой касания.
  3. Bar — это пользовательский интерфейс.
  4. Панель — это просто нарисованная графика, и я должен перекодировать координаты касания и произвести некоторые вычисления, чтобы узнать, какая панель была затронута. Я не не верю в эту стратегию, но, возможно, есть причины пересмотреть это, которые вы можете предоставить мне…

Я предполагаю, что UILable — это способ представления данных, связанных с панелью?

Заранее спасибо за ваш совет!

Ответ №1:

По моему скромному мнению, и я написал много столбчатых диаграмм (и других графиков)… # 4 на самом деле правильный выбор с точки зрения производительности и моих личных предпочтений. Создание виртуального графика в памяти для сопоставления касаний с полосами совсем не сложно, поскольку вы просто сохраняете прямоугольники в массивах и проверяете, находятся ли точки внутри этого прямоугольника.

  CGRectContainsPoint(CGRect, CGPoint);
  

Теперь, сказав это, если вы хотите добавить анимацию в свою диаграмму, что довольно круто … тогда я мог бы создать UIView, состоящий из нескольких UIViews (по одному для каждого столбца или сегмента столбца), таким образом, вы можете анимировать каждый столбец по отдельности, не создавая свой собственный цикл анимации.

всего лишь мои два цента.

Комментарии:

1. Спасибо! Это выглядит довольно гладко. Сталкивались ли вы с какими-либо недостатками при использовании этой стратегии?

Ответ №2:

я думаю, что # 2 и # 3 — это примерно одно и то же, поскольку вы бы отображали изображение с помощью UIImageView. UIButton — это довольно тонкий слой в UIView, который упрощает обработку событий, но он может визуально делать то, чего вы не хотите (или, может быть, вы делаете?). В любом случае, попробовать эти варианты так просто, что я бы просто поиграл с этим. Я не вижу конкретной причины для # 4, если только ваша общая стратегия не ведет вас в этом направлении, например, возможно, вы начинаете делать какой-то рисунок, который достаточно насыщенный / сложный, чтобы у вас было создано слишком много представлений.

Что касается всплывающего окна, это действительно зависит от того, что вы подразумеваете под «всплывающим». Например, как только оно появляется, вам нужен способ отключить это всплывающее окно?

Комментарии:

1. Спасибо за ваш ответ. Всплывающее окно может быть видно, пока я не коснусь другой панели. Следовательно, всплывающее окно не должно занимать весь экран, только небольшой квадрат. Возможно, если я коснусь «фона», всплывающее окно должно исчезнуть.

Ответ №3:

Вы проверили Core Plot? Это активная и мощная библиотека, которая довольно гибкая и должна отвечать всем вашим потребностям.

Комментарии:

1. Спасибо! Есть ли у этого также функция, заключающаяся в том, что при касании панели отображается представление с данными? У меня уже есть компонент диаграммы, который я довольно легко могу расширить и превратить в столбчатую диаграмму. Так что я просто хочу сделать это правильным способом.