以编程方式放大显示标记的图表部分

问题描述 投票:0回答:0

在 Mac 应用程序中,我试图放大 x 轴上当前可见标记的部分。

我正在使用下面的一些逻辑来计算 x 位置:

private func getZoomXPosition() -> CGFloat {
    var x = 0.0
    if let highlight = self.chartView.highlighted.first {
        print("highlight x=\(highlight.x) drawX=\(highlight.drawX)")
        let pos = chartView.getMarkerPosition(highlight: highlight)
        x = pos.x
    }
    print("zoom to x: \(x)")
    return x
}

如果存在高亮(然后我们在该位置显示一个标记)

然后我打电话给:

self.chartView.zoom(scaleX: 1.5, scaleY: 1.0, x: x, y: 0)

执行缩放到该 x 位置。这似乎主要工作,除非你达到某个缩放级别,下一次放大似乎缩放到错误的点。

clicked ChartDataEntry, x: 3125.0, y 393.0
highlight x=3125.0 drawX=286.3808824269045
zoom to x: 286.3808824269045
clicked ChartDataEntry, x: 3125.0, y 393.0
highlight x=3125.0 drawX=272.58693711440446
zoom to x: 272.58693711440446
clicked ChartDataEntry, x: 3125.0, y 393.0
highlight x=3125.0 drawX=262.2414781300295
zoom to x: 262.2414781300295
clicked ChartDataEntry, x: 3125.0, y 393.0
highlight x=3125.0 drawX=258.36193101088895
zoom to x: 258.36193101088895
clicked ChartDataEntry, x: 3125.0, y 393.0
highlight x=3125.0 drawX=259.0893460957275
zoom to x: 259.0893460957275
clicked ChartDataEntry, x: 3125.0, y 393.0
highlight x=3125.0 drawX=258.3391992894881
zoom to x: 258.3391992894881
clicked ChartDataEntry, x: 3125.0, y 393.0
highlight x=3125.0 drawX=260.06219273506895
zoom to x: 260.06219273506895
clicked ChartDataEntry, x: 3125.0, y 393.0
highlight x=3125.0 drawX=252.83369679540647
zoom to x: 252.83369679540647
clicked ChartDataEntry, x: 3125.0, y 393.0
highlight x=3125.0 drawX=303.74376780794955
zoom to x: 303.74376780794955

正如您从日志中看到的那样,第 9 次放大总是导致问题。

3月18日更新:

我已经更新了上面的方法以包含打印件。

所以我在图表上找到当前突出显示的位置

chartView.hightlighted.first

然后我将其转换为图表上的实际点

chartView.getMarkerPosition(highlight: highlight

然后终于打电话

cahrtView.zoom()

x 和 x 比例因子 1.5.

直到第 8 级放大(通过单击放大按钮),它都可以正常工作。第 9 个总是放大到图表的错误部分。

swift macos ios-charts
© www.soinside.com 2019 - 2024. All rights reserved.