2013-02-28 15 views

Odpowiedz

56

Oto moje rozwiązanie tego problemu. Budowanie obiektu GMSCoordinateBounds według wielu współrzędnych.

- (void)focusMapToShowAllMarkers 
{  
    CLLocationCoordinate2D myLocation = ((GMSMarker *)_markers.firstObject).position; 
    GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithCoordinate:myLocation coordinate:myLocation]; 

    for (GMSMarker *marker in _markers) 
     bounds = [bounds includingCoordinate:marker.position]; 

    [_mapView animateWithCameraUpdate:[GMSCameraUpdate fitBounds:bounds withPadding:15.0f]]; 
} 

Updated odpowiedź: Ponieważ GMSMapView markery właściwość jest nieaktualna, należy zapisać wszystkie markery we własnej tablicy.

aktualizowane Swift 3 odpowiedź:

func focusMapToShowAllMarkers() { 
     let firstLocation = (markers.first as GMSMarker).position 
     var bounds = GMSCoordinateBoundsWithCoordinate(firstLocation, coordinate: firstLocation) 

     for marker in markers { 
      bounds = bounds.includingCoordinate(marker.position) 
     } 
     let update = GMSCameraUpdate.fitBounds(bounds, withPadding: CGFloat(15)) 
     self.mapView.animate(cameraUpdate: update) 
    } 
+2

działa dobrze. Chociaż właściwość znacznika została już uznana za przestarzałą. Zamiast tego użyłem lokalizacji znaczników, które miałem w tablicy. –

+0

Dziękuję, użyłem tego wspaniałego rozwiązania :), ale jak powiedział @ManishAhuja, użyłem mojej własnej przechowywanej tablicy GMSMarker do zbudowania granic. –

+0

Dzięki @ManishAhuja and AubadaTaijo. Iv'e zaktualizował odpowiedź. – Lirik

3

Na razie Google w końcu wdrożyło GMSCoordinateBounds, możesz go użyć z GMSCameraUpdate.

Aby uzyskać szczegółowe informacje, należy zapoznać się z urzędnikiem reference.

5

Swift 3.0 wersja Lirik za odpowiedź:

func focusMapToShowAllMarkers() { 
    let myLocation: CLLocationCoordinate2D = self.markers.first!.position 
    var bounds: GMSCoordinateBounds = GMSCoordinateBounds(coordinate: myLocation, coordinate: myLocation) 

    for marker in self.markers { 
     bounds = bounds.includingCoordinate(marker.position) 
     self.mapView.animate(with: GMSCameraUpdate.fit(bounds, withPadding: 15.0)) 
    } 
} 

i tu jest mój własny sposób:

func focusMapToShowMarkers(markers: [GMSMarker]) { 

    guard let currentUserLocation = self.locationManager.location?.coordinate else { 
     return 
    } 

    var bounds: GMSCoordinateBounds = GMSCoordinateBounds(coordinate: currentUserLocation, 
                  coordinate: currentUserLocation) 

    _ = markers.map { 
     bounds = bounds.includingCoordinate($0.position) 
     self.mapView.animate(with: GMSCameraUpdate.fit(bounds, withPadding: 15.0)) 
    } 
} 

I można zadzwonić do mojego funkcja powyżej:

self.focusMapToShowMarkers(markers: [self.myLocationMarker, currentPokemonMarker])

Powiązane problemy