Я пользуюсь услугами Google maps в iOS (Swift) и Android. В андроиде вид карты имеет метод, называемый animatreCamera
, который имеет анимацию, в которой движение имеет эффект «уменьшения масштаба» (если обе камеры имеют одинаковый зум, изображение карты уменьшит первую часть движения а затем увеличьте вторую часть). Я хочу добиться этого эффекта с помощью GMSMapView
в iOS, я пробовал использовать следующие методы: animateToCameraPosition
, , animateWithCameraUpdate
, moveCamera
и установить камеру на mapView.camera = GMSCameraPosition(target: location, zoom: 15, bearing: 0, viewingAngle: 0)
, и ни одна из них не имеет этой анимации. Если возможно, как я могу достичь этой анимации при перемещении камеры?GMSMapView animateToCameraPosition zoom in - уменьшить масштаб анимации
5
A
ответ
4
Я думаю, что нет прямого способа архивировать одну и ту же анимацию в SDK Google Maps iOS.
Обойти можно использовать dispatch_after
метод IOS, сначала вы можете определить метод, чтобы задержать, сколько секунд вы хотите:
func delay(#seconds: Double, completion:()->()) {
let popTime = dispatch_time(DISPATCH_TIME_NOW, Int64(Double(NSEC_PER_SEC) * seconds))
dispatch_after(popTime, dispatch_get_main_queue()) {
completion()
}
}
Затем вы можете увеличить вашу камеру, переместить в папку, а затем увеличить масштаб delay
метод:
delay(seconds: 0.5) {() ->() in
var zoomOut = GMSCameraUpdate.zoomTo(kGMSMinZoomLevel)
mapView.animateWithCameraUpdate(zoomOut)
delay(seconds: 0.5, {() ->() in
var vancouver = CLLocationCoordinate2DMake(49.26,-123.11)
var vancouverCam = GMSCameraUpdate.setTarget(vancouver)
mapView.animateWithCameraUpdate(vancouverCam)
delay(seconds: 0.5, {() ->() in
var zoomIn = GMSCameraUpdate.zoomTo(kGMSMaxZoomLevel)
mapView.animateWithCameraUpdate(zoomIn)
})
})
}
Вы можете использовать собственное значение масштабирования, я использую kGMSMinZoomLevel
и kGMSMaxZoomLevel
здесь.
0
Swift 4:
func delay(seconds: Double, closure: @escaping() ->()) {
DispatchQueue.main.asyncAfter(deadline: .now() + seconds) {
closure()
}
}
Затем вызовите его:
delay(seconds: 0.5) {() ->() in
let zoomOut = GMSCameraUpdate.zoom(to: 10)
self.mapView.animate(with: zoomOut)
self.delay(seconds: 0.5, closure: {() ->() in
var vancouver = CLLocationCoordinate2DMake(49.26,-123.11)
var vancouverCam = GMSCameraUpdate.setTarget(vancouver)
self.mapView.animate(toLocation: vancouverCam)
self.delay(seconds: 0.5, closure: {() ->() in
let zoomIn = GMSCameraUpdate.zoom(to: 15)
self.mapView.animate(with: zoomIn)
})
})
}