2015-06-17 27 views
5

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

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) 

       }) 
      }) 
     }