swift iOS-Chart:以编程方式选择数据点,但突出显示为NAN

s4n0splo  于 2023-05-16  发布在  Swift
关注(0)|答案(2)|浏览(170)

我想以编程方式选择最后一个数据点并绘制渐变背景,但我得到的highLight是NAN,所以我无法获得绘制渐变的坐标。我使用:

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

选择最后一个条目,并在delegate函数中绘制渐变:
func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight)
我也试过用“valueToPixelMatrix”的方式来获取坐标,但结果与highlight.xPx和highlight.yPx不同,我想问一下如何才能在图表视图上获取数据点的正确坐标。谢谢大家。

gijlo24d

gijlo24d1#

我认为你用错误的方式定制突出显示。您不需要使用此委托函数进行绘图。
您需要创建自己的渲染器类并覆盖drawHighlighted(context: CGContext, indices: [Highlight])方法。在这个地方,您将获得正确的坐标。请记住,您需要根据图表视图的类型从适当的父类示例化。(例如CandleStickChartRendererBarChartRendererLineChartRenderer等)
别忘了将自定义渲染器类的示例设置为图表视图的渲染器属性。
祝你好运

anhgbhbe

anhgbhbe2#

你可以试试这个:

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

相关问题