【问题标题】:iOS Charts: Determine the positioning and color of the highlighted entryiOS Charts:确定突出显示条目的位置和颜色
【发布时间】:2019-03-31 15:54:00
【问题描述】:

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

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

我正在尝试获取以下内容,并用粉红色勾勒出来:

【问题讨论】:

    标签: ios-charts


    【解决方案1】:

    :: 1 :: 弹窗位置

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

    不过,我认为根据点击位置进行操作是一个不错的选择。这至少使弹出窗口显示在与饼图段相同的一般区域中。在我看来,它仍然应该是一个很好的用户体验。 :)

    :: 2 :: 当前选中段的颜色

    PieChartDataSet 有一个 values 属性,其中包含您的 ChartDataEntry 对象。所以你可以找到匹配的索引,因为chartValueSelected 委托方法将当前的ChartDataEntry 对象(entry)传递给你。

    【讨论】:

      【解决方案2】:

      PieChartView 具有marker 属性,当在图表上单击值时,您可以使用该属性显示标记。在我看来,使用marker 属性并创建自定义标记类是解决任务的首选方式。

      自定义标记类必须符合IMarker 协议,并且可以从MarkerImage 类中实例化。注意两个功能:

      • draw(context: CGContext, point: CGPoint) 具有两个输入参数的函数,它们传递位置和上下文以进行绘图。这样你就有了关于你的气球位置的信息。

      • refreshContent(entry: ChartDataEntry, highlight: Highlight)。在此功能中,您可以为气球选择颜色。 MarkerImage 类具有 chartView 属性,因此您可以访问数据集。如果您使用多个数据集,您可以使用highlight.dataSetIndex 的值来定义被点击的数据集。选择数据集后,您可以使用dataSet.entryIndex(entry: entry) 获得的索引从dataSet.colors 属性中获取颜色。

      颜色选择示例:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-05
        • 2013-03-11
        • 1970-01-01
        相关资源
        最近更新 更多