快速图表-突出显示中心点

时间:2019-06-19 10:53:50

标签: swift charts

我正在使用https://github.com/danielgindi/Charts创建图表。 用户滚动图表后,我想获取最靠近图表中间的数据点:

        let currentMinX = self.chartView.lowestVisibleX
        let currentMaxX = self.chartView.highestVisibleX
        let midX = currentMinX + (currentMaxX - currentMinX)/2

        let currentMinY = self.chartView.chartYMin // y is not scrollable, so I can use it
        let currentMaxY = self.chartView.chartYMax
        let midY = currentMinY + (currentMaxY - currentMinY)/2

        let midPoint = CGPoint(x: midX, y: midY)

        let closestPoint = chartView.getHighlightByTouchPoint(midPoint)
        print("\(closestPoint?.x ?? 0)-\(closestPoint?.y ?? 0)")

不幸的是,最近点是最接近可见区域左下角的位置,而不是最接近中间区域的位置。这是为什么? 调试影片:https://youtu.be/YTYqt5o6ifQ

编辑: 显然,变压器返回了错误的值: 我已经通过更改“变形金刚”的方法进行了修复:

 @objc open func valueForTouchPoint(x: CGFloat, y: CGFloat) -> CGPoint
    {
        return CGPoint(x: x, y: y)//CGPoint(x: x, y: y).applying(pixelToValueMatrix)
    }

1 个答案:

答案 0 :(得分:2)

getHighlightByTouchPoint期望视点坐标系。 (与valueForTouchPoint相同),并且您的(midX, midY)点在图表坐标系中。这可能是您得到错误结果的主要原因。如果是这样,您可以使用以下代码替换代码:

    // if you have any additional insets, for chart area in the view, 
    // change calculation of this point to make it point to the middle of the chart area
    let midPoint = CGPoint(x: self.chartView.bounds.midX, y: self.chartView.bounds.midY) 
    let closestPoint = chartView.getHighlightByTouchPoint(midPoint)

更新:将frame替换为bounds,以便在不同情况下更正确地实施