Быстрые диаграммы - выделить центральную точку - PullRequest
2 голосов
/ 19 июня 2019

Я использую 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)")

К сожалению, closestPoint - это ближайший к левому нижнему углу видимой области, а не ближайший к нему.к середине.Это почему?Фильм отладки: 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 Ответ

2 голосов
/ 24 июня 2019

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)

Upd: Заменено frame на bounds для более правильной реализации в различных ситуациях

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...