iOS图表:确定突出显示的条目的位置和颜色

时间:2018-10-26 21:08:34

标签: ios-charts

我有一个用Charts library实现的饼图。现在,当点击一个条目并将其突出显示时,我想显示一个工具提示,该提示显示所选条目的值,该值位于该条目的中间,并以与所选饼图相同的颜色勾勒出轮廓。

在委托函数chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight)中,我可以获得突出显示的xPxyPx,但这是用户点击以突出显示该条目的接触点,而不是突出显示的中心点。条目本身,因此将工具提示置于这些值的中心会导致工具提示根据您点击条目的位置而跳来跳去。而且我看不到任何获得突出显示条目颜色的方法。

我正在尝试获取以下内容,并用粉红色为其勾勒出轮廓: enter image description here

2 个答案:

答案 0 :(得分:1)

::: 1 ::弹出窗口的位置

嗯...我一直在寻找,但我认为ChartDataEntry没有可用的frame用作设置弹出窗口位置的参考点。

不过,我认为根据拍子位置进行操作是一种不错的选择。这至少会使弹出窗口显示在与饼图段相同的常规区域中。我认为,它仍然应该是一种良好的用户体验。 :)

::: 2 ::当前所选细分的颜色

PieChartDataSet具有一个values属性,其中包含您的ChartDataEntry对象。因此,由于chartValueSelected委托方法向您传递了当前的ChartDataEntry对象(entry),因此您可以找到匹配索引的索引。

答案 1 :(得分:0)

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)
}