Диаграммы iOS: определение расположения и цвета выделенной записи - PullRequest
0 голосов
/ 27 октября 2018

У меня есть круговая диаграмма, реализованная с помощью библиотеки Charts .Теперь, когда запись коснулась и стала подсвеченной, я хотел бы показать всплывающую подсказку, которая отображает значение выбранной записи, расположенной в середине записи и обведенной тем же цветом, что и выбранная часть пирога.

В функции делегата chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) я могу получить выделения xPx и yPx, но это та точка прикосновения, в которой пользователь коснулся, чтобы выделить эту запись, а не центральная точка самой записи, поэтому центрированиевсплывающая подсказка для этих значений приводит к тому, что всплывающая подсказка перемещается в зависимости от того, где вы касаетесь записи.И я не вижу способа получить цвет выделенной записи.

Я пытаюсь получить следующее и обвести его в розовый цвет: enter image description here

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

PieChartView имеет свойство marker, которое можно использовать для отображения маркера при щелчке значения на графике. На мой взгляд, использование свойства marker и создание собственного класса маркера - это предпочтительный способ решения вашей задачи.

Пользовательский класс маркера должен соответствовать протоколу IMarker и может создаваться из класса MarkerImage. Обратите внимание на две функции:

  • draw(context: CGContext, point: CGPoint) функция с двумя входными параметрами, которые передают положение и контекст для рисования. Итак, у вас есть информация о позиции вашего воздушного шара.

  • refreshContent(entry: ChartDataEntry, highlight: Highlight). В этой функции вы можете выбрать цвет для воздушного шара. Класс MarkerImage имеет свойство chartView, поэтому у вас есть доступ к наборам данных. Если вы используете более одного набора данных, вы можете использовать значение highlight.dataSetIndex, чтобы определить набор данных, по которому щелкнули. Когда выбран набор данных, вы можете получить цвет из свойства dataSet.colors, используя индекс, полученный с помощью dataSet.entryIndex(entry: entry).

Пример выбора цвета:

open override func refreshContent(entry: ChartDataEntry, highlight: Highlight)
{
    let dataSet = chartView!.data!.dataSets[highlight.dataSetIndex]
    let colorIndex = dataSet.entryIndex(entry: entry) % dataSet.colors.count
    color = dataSet.colors[colorIndex]

    super.refreshContent(entry: entry, highlight: highlight)
}
0 голосов
/ 27 октября 2018

:: 1 :: Положение всплывающего окна

Хм ... Я искал и не думаю, что у ChartDataEntry есть доступный frame, который можно использовать в качестве контрольной точки для установки позиции вашего всплывающего окна.

Я думаю, что делать это на основе местоположения крана - достойная альтернатива. По крайней мере, это заставляет всплывающее окно показываться в той же общей области, что и круговой сегмент. На мой взгляд, это все равно должно быть хорошим опытом для пользователей. :)

:: 2 :: Цвет текущего выбранного сегмента

PieChartDataSet имеет свойство values, в котором находятся ChartDataEntry объекты. Таким образом, вы можете найти индекс соответствия, так как метод делегата chartValueSelected передает вам текущий объект ChartDataEntry (entry).

...