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.