2015-06-17 22 views
5

Sto utilizzando i servizi di mappe di Google in iOS (Swift) e Android. In Android, la vista mappa ha un metodo chiamato animatreCamera che ha un'animazione in cui il movimento ha un effetto "zoom indietro - zoom in" (se entrambe le fotocamere hanno lo stesso zoom, la vista della mappa ridurrà la prima parte del movimento e quindi ingrandire la seconda parte). Voglio ottenere questo effetto con il GMSMapView in iOS, ho provato i seguenti metodi: animateToCameraPosition, animateToLocation, animateWithCameraUpdate, moveCamera e l'impostazione della fotocamera da mapView.camera = GMSCameraPosition(target: location, zoom: 15, bearing: 0, viewingAngle: 0) e nessuno di loro ha questa animazione. Se possibile, come posso ottenere questa animazione quando si sposta la fotocamera?GMSMapView animateToCameraPosition zoom in - zoom out animazione

risposta

4

Penso che non ci sia un modo diretto per archiviare la stessa animazione nell'SDK di Google Maps.

Una soluzione può usare il metodo di iOS dispatch_after, prima è possibile definire un metodo per ritardare il numero di secondi che si desidera:

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() 
    } 
} 

Quindi è possibile diminuire la fotocamera, passare a una posizione, poi lo zoom in con il metodo 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) 

     }) 
    }) 
} 

Si utilizza il proprio valore di zoom, io uso kGMSMinZoomLevel e kGMSMaxZoomLevel qui.

0

Swift 4:

func delay(seconds: Double, closure: @escaping() ->()) { 
    DispatchQueue.main.asyncAfter(deadline: .now() + seconds) { 
     closure() 
    } 
    } 

Poi chiamarlo:

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) 

       }) 
      }) 
     }