iOS (Swift) ve Android'de Google maps hizmetlerini kullanıyorum. Android'de harita görünümü, hareketin "yakınlaştırma - yakınlaştırma" etkisine sahip olduğu bir animasyona sahip olan animatreCamera
adlı bir yönteme sahiptir (her iki kamerada da aynı zum varsa, harita görünümü hareketin ilk bölümünü uzaklaştıracaktır) ve sonra ikinci parçayı yakınlaştırın. Bu etkiyi iOS'taki GMSMapView
ile gerçekleştirmek istiyorum, aşağıdaki yöntemleri denedim: animateToCameraPosition
, animateToLocation
, animateWithCameraUpdate
, moveCamera
ve kamerayı mapView.camera = GMSCameraPosition(target: location, zoom: 15, bearing: 0, viewingAngle: 0)
ayarlayarak bunların hiçbiri bu animasyonu kullanamaz. Mümkünse, kamerayı hareket ettirirken bu animasyonu nasıl başarabilirim?GMSMapView animateToCameraYükleme yakınlaştırma - uzaklaştırma animasyonu
5
A
cevap
4
Aynı animasyonları Google Haritalar iOS SDK'sinde arşivlemenin doğrudan bir yolu olmadığını düşünüyorum. Daha sonra,
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()
}
}
Sonra, kameranızı uzaklaştırmak bir konuma taşıyabilirsiniz ile yakınlaştırmak:
iOS en dispatch_after
yöntemi kullanabilirsiniz bir geçici çözüm, ilk istediğiniz kaç saniye geciktirmek için bir yöntem tanımlayabilirsiniz delay
yöntemi:
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)
})
})
}
kendi yakınlaştırma değerini kullanmak, burada kGMSMinZoomLevel
ve kGMSMaxZoomLevel
kullanın.
0
Swift 4:
func delay(seconds: Double, closure: @escaping() ->()) {
DispatchQueue.main.asyncAfter(deadline: .now() + seconds) {
closure()
}
}
Sonra diyoruz:
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)
})
})
}