2016-09-28 5 views
1

Я в принципе есть карта, где я добавляю две аннотаций, и они показаны, как и ожидался.MapView показать все аннотации и увеличить как можно больше карт

Затем I'm, используя следующий код:

let annotations = [start, end] 
mapView?.showAnnotations(annotations, animated: false) 

И это изменяет масштаб изображения, чтобы показать мою карту с двумя примечаниями, но карта может быть наведена в гораздо больше, и показать более подробно посмотреть на карте.

This is what I get today и this is the expected result, что я хочу.

Как вы можете видеть, что карта может быть увеличено намного больше.

Любые идеи, как достичь этого?

ответ

1

Используй это:

extension MKMapView { 
    /// when we call this function, we have already added the annotations to the map, and just want all of them to be displayed. 
    func fitAll() { 
     var zoomRect   = MKMapRectNull; 
     for annotation in annotations { 
      let annotationPoint = MKMapPointForCoordinate(annotation.coordinate) 
      let pointRect  = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0.01, 0.01); 
      zoomRect   = MKMapRectUnion(zoomRect, pointRect); 
     } 
     setVisibleMapRect(zoomRect, edgePadding: UIEdgeInsetsMake(100, 100, 100, 100), animated: true) 
    } 

    /// we call this function and give it the annotations we want added to the map. we display the annotations if necessary 
    func fitAll(in annotations: [MKAnnotation], andShow show: Bool) { 
     var zoomRect:MKMapRect = MKMapRectNull 

     for annotation in annotations { 
      let aPoint   = MKMapPointForCoordinate(annotation.coordinate) 
      let rect   = MKMapRectMake(aPoint.x, aPoint.y, 0.1, 0.1) 

      if MKMapRectIsNull(zoomRect) { 
       zoomRect = rect 
      } else { 
       zoomRect = MKMapRectUnion(zoomRect, rect) 
      } 
     } 
     if(show) { 
      addAnnotations(annotations) 
     } 
     setVisibleMapRect(zoomRect, edgePadding: UIEdgeInsets(top: 100, left: 100, bottom: 100, right: 100), animated: true) 
    } 

} 

затем, после создания выхода для вашего MapView, например, как map, и с вами аннотацией либо добавляется к карте в массиве называется annotations, доступ к выше методам, как так:

map.fitAll() 

ИЛИ

map.fitAll(in:annotations, true) 

соответственно.

Использование истинным или ложным в последнем заявлении в зависимости от того, что вы добавили аннотации к карте, или нет ...

1

В Swift:

self.mapView.showAnnotations(self.mapView.annotations, animated: true) 

Это то, что я использую, чтобы показать все аннотации. почти так же, как вы делаете «да». карта масштабирует это, чтобы соответствовать видимой или полезной части карты, в моем приложении масштаб хорош и добавляет некоторое дополнение, так что ни один из контактов не касается краев.

так, возможно, после того, как карты будет сделано, вы можете быстро использовать setVisibleMapRect: edgePadding: анимированный: с помощью нового visibleRect с отрицательным набивкой.

Смежные вопросы