iOS-Chart:以编程方式选择数据点,但获取highLight为NAN

时间:2018-03-26 07:26:57

标签: ios swift ios-charts

I' D喜欢选择最后一个数据点编程和绘制渐变背景,但我得到的亮点是NAN,所以我可以'吨得到的坐标来绘制gradient.I使用:

chartView.highlightValue(Highlight(x: lastEntry.x, y: lastEntry.y, dataSetIndex: 0), callDelegate: true)

选择最后一个条目,并在委托函数中绘制渐变:

func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight)

但重点是NAN然后崩溃 我也尝试过使用" valueToPixelMatrix"获取坐标的方法,但结果与highlight.xPx和highlight.yPx不同, 我想问一下如何在Chart View上获得正确的数据点坐标。谢谢。

2 个答案:

答案 0 :(得分:1)

我认为您使用错误的方式来自定义突出显示。您不需要使用此委托功能进行绘图。

您需要创建自己的渲染器类并覆盖drawHighlighted(context: CGContext, indices: [Highlight])方法。在这个地方,您将获得正确的坐标。 请记住,您需要根据图表视图的类型从正确的父类实例化。 (例如CandleStickChartRendererBarChartRendererLineChartRenderer等)

请勿忘记将自定义渲染器类的实例设置为图表视图的渲染器属性。

祝你好运。

答案 1 :(得分:0)

您可以尝试以下方法:

func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) {

    guard let chartDataSet = data.set else {return} // get dataSet used by chart
    guard let chartView = chartView as? LineChartView else {return}
    let transform = chartView.getTransformer(forAxis: chartDataSet.axisDependency)
    let pt = transform.pixelForValues(x: highlight.x, y: highlight.y)

    if highlightMark == nil {
      setHighlightMark() // create a custom view
      self.addSubview(highlightMark!)
    }
    let convertPt = self.convert(pt, from: chartView)
    highlightMark?.center = CGPoint(x: convertPt.x, y: convertPt.y)
  }