2015-06-17 8 views
5

Ich verwende Google Maps Services in iOS (Swift) und Android. In Android hat die Kartenansicht eine Methode namens animatreCamera, die eine Animation hat, in der die Bewegung einen "Verkleinern - Vergrößern" Effekt hat (wenn beide Kameras den gleichen Zoom haben, wird die Kartenansicht den ersten Teil der Bewegung verkleinern) und dann den zweiten Teil heranzoomen). Ich möchte diesen Effekt mit der GMSMapView in iOS erreichen, habe ich die folgenden Methoden versucht: animateToCameraPosition, animateToLocation, animateWithCameraUpdate, moveCamera und Einstellung der Kamera von mapView.camera = GMSCameraPosition(target: location, zoom: 15, bearing: 0, viewingAngle: 0) und keiner von ihnen haben diese Animation. Wenn möglich, wie kann ich diese Animation beim Bewegen der Kamera erreichen?GMSMapView animateToCameraPosition vergrößern - Animation verkleinern

Antwort

4

Ich glaube, es gibt keine direkte Möglichkeit, die gleiche Animation im Google Maps iOS SDK zu archivieren.

kann Eine Abhilfe iOS dispatch_after Methode verwenden, zunächst können Sie eine Methode zur Verzögerung festlegen, wie viele Sekunden Sie wollen:

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

Dann können Sie Ihre Kamera verkleinern, um eine Position zu verschieben, dann zoomen mit die delay Methode:

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) 

     }) 
    }) 
} 

Sie Ihren eigenen Zoom-Wert verwenden, verwende ich kGMSMinZoomLevel und kGMSMaxZoomLevel hier.

0

Swift 4:

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

Dann nennen:

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) 

       }) 
      }) 
     }