Google Map iOS - анимация масштабирования не работает одинаково на двух разных телефонах (iPhone X против iPhone 7) - PullRequest
0 голосов
/ 07 января 2019

Вот мой метод:

private func animateCamera(lat: Double, long: Double, zoom: Float) {

    DispatchQueue.main.async {
         CATransaction.begin()
         CATransaction.setValue(1, forKey: kCATransactionAnimationDuration)
         let camera = GMSCameraPosition.camera(withLatitude: lat, longitude: long, zoom: zoom)
         self.mapView.animate(to: camera)
         CATransaction.commit()
    }
}

Вот как я это называю:

animateCamera(lat: obs.position.latitude, long: obs.position.longitude, zoom: 7)

Анимация увеличения работает на iPhone X.

С другой стороны, на iPhone 7 анимация масштабирования не центрирована на моей точке назначения, когда она закончена (широта / долгота передана как параметры).

Это из-за разного разрешения экрана?

Как мне справиться с этим?

1 Ответ

0 голосов
/ 07 января 2019

Попробуйте использовать инициализатор длинных форм в методе определения положения камеры и более современный подход к настройке продолжительности вашего CATransaction:

private func animateCamera(lat: Double, long: Double, zoom: Float) {

    DispatchQueue.main.async {

        CATransaction.begin()
        CATransaction.setAnimationDuration(1)
        CATransaction.setAnimationTimingFunction(CAMediaTimingFunction(controlPoints: 0.25, 0.75, 0.25, 1)) // you can add a timing curve too btw
        self.mapView.animate(to: GMSCameraPosition.camera(withLatitude: lat, longitude: long, zoom: zoom, bearing: self.mapView.camera.bearing, viewingAngle: self.mapView.camera.viewingAngle))
        CATransaction.commit()

    }

}

Это дает одинаковый результат во всех моих симуляторах.

...