GMap Rotação do rolamento em movimento suave (evite o efeito irregular ao alterar os valores do rolamento)

Quero girar o GMap alterando o valor do ângulo do rolamento, para que a câmera gire em torno do ponto central (360 graus uma volta completa). Quando mudamos o rumo, há um efeito de atenuação nos pontos de início e fim da câmera. Como posso controlar / alterar isso para facilitar a rotação quando a alteraçãoBearing valores (para rodar o mapa em 360 graus, animação suave)?

Necessário para todos os idiomas, pois parece que o efeito de atenuação é diferente em diferentes bibliotecas de idiomas. por exemplo. Swift, Android, PHP, JS, Node.js, React.

Por favor, não vote, sem especificar um motivo válido (que nos ajuda a aprender e conhecer também). Não gosto de críticos comportamento rude e sem instrução de atitude de voto silencioso.

Exemplo rápido (executando OK na animação linear):

Observe que, inicialmente, a animação também teve reflexos no iOS, mas quando fazemos uso deCAMediaTimingFunction(name: kCAMediaTimingFunctionLinear ao longo de suaCATransaction propriedades, a animação GMap se transformou em animação suave. agora, se você vir o código abaixo, a alteração noBearing O valor não cria efeito espasmódico (devido ao efeito de suavização na animação GMap). Estou procurando uma solução apropriada paraAndroid eWeb também.

//Move the map around current location, first loop
let timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
CATransaction.begin()
CATransaction.setValue(3.0, forKey: kCATransactionAnimationDuration)
CATransaction.setAnimationTimingFunction(timingFunction)
CATransaction.setCompletionBlock({
    //Move the map around current location, second loop
    let timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
    CATransaction.begin()
    CATransaction.setValue(3.0, forKey: kCATransactionAnimationDuration)
    CATransaction.setAnimationTimingFunction(timingFunction)
    CATransaction.setCompletionBlock({
        //Move the map around current location, third loop
        let timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
        CATransaction.begin()
        CATransaction.setValue(3.0, forKey: kCATransactionAnimationDuration)
        CATransaction.setAnimationTimingFunction(timingFunction)
        CATransaction.setCompletionBlock({
            UIView.animate(withDuration: 0.5, animations: {
                self.findingYourLocation.alpha = 0.0
            })
            //TODO: Set nearest branch
            // Zoom in one zoom level
            let zoomCamera = GMSCameraUpdate.zoomIn()
            self.mapView.animate(with: zoomCamera)

            // Center the camera on UBL Branch when animation finished
            //let nearestBranch = CLLocationCoordinate2D(latitude: 24.850751, longitude: 67.016589)
            let nearestBranch = CLLocationCoordinate2D.init(latitude: 24.806849, longitude: 67.038734)
            let nearestBranchCam = GMSCameraUpdate.setTarget(nearestBranch)



            CATransaction.begin()

            let timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
            CATransaction.setValue(3.0, forKey: kCATransactionAnimationDuration)
            CATransaction.setAnimationTimingFunction(timingFunction)
            CATransaction.setCompletionBlock({
                self.nextButton.alpha = 1.0
            })
            self.mapView.animate(with: nearestBranchCam)
            self.mapView.animate(toZoom: 15)
            self.mapView.animate(toBearing: 0)
            self.mapView.animate(toViewingAngle: 0)

            CATransaction.commit()

        })
        self.mapView.animate(toBearing: self.mapView.camera.bearing + 120)
        CATransaction.commit()

    })
    self.mapView.animate(toBearing: self.mapView.camera.bearing + 120)
    CATransaction.commit()

})
self.mapView.animate(toBearing: self.mapView.camera.bearing + 120)
CATransaction.commit()

O código de exemplo do Android (com problema):

O exemplo / código de exemplo do Android pode ser encontrado aqui:https://issuetracker.google.com/issues/71738889

O que também inclui uma.apk arquivo, um.mp4 vídeo da saída do aplicativo de amostra. O que mostra claramente efeitos espasmódicos quandoBearing o valor muda enquanto gira o mapa em 360 graus.

questionAnswers(3)

yourAnswerToTheQuestion