iOS – MKMapView showAnnotaciones: animadas: con relleno?

Quiero poder hacer zoom de mi MKMapView para ajustarse a sus annotations. He logrado hacerlo utilizando el método showAnnotations de iOS7. Pero también me gustaría agregar algunos rellenos o recuadros del borde de la vista del map. Esto se debe a que tengo una vista semi-transperante que superpone la parte superior de mi map, y no quiero que las annotations sean lugares detrás de esta vista. He intentado esto:

 [self.mapView showAnnotations:annotations animated:YES]; [self.mapView setVisibleMapRect:self.mapView.visibleMapRect edgePadding:UIEdgeInsetsMake(100, 20, 10, 10) animated:NO]; 

Pero no funciona como lo hubiera esperado. ¿Alguna idea sobre cómo podría hacerlo de manera diferente?

Lo estás haciendo de la manera correcta. Intenta cambiar el relleno, verás la diferencia.

De lo contrario, debe haber algo más en su código que impida cambiar la vista.

EDITAR: Estaba totalmente equivocado. Prueba esto:

Crear una variable de instancia

 BOOL _mapNeedsPadding; 

e inicialízalo a NO;

A continuación, configure su delegado de mapView en sí mismo y agregue un encabezado de su class

Luego agrega esto a tu class

 - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{ if(_mapNeedsPadding){ _mapNeedsPadding = NO; [self.mapView setVisibleMapRect:self.mapView.visibleMapRect edgePadding:UIEdgeInsetsMake(100, 20, 10, 10) animated:YES]; } } 

Y, finalmente, llame a su function showAnnotations de esta manera:

 _mapNeedsPadding = YES; [self.mapView showAnnotations:annotations animated:YES]; 

El showAnnimation activará la function regionDidChangeAnimated. Debe configurar _mapNeedsPadding en NO después de cambiar visibleMapRect porque esta function (setVisibleMapRect: self) también activará regionDidChangeAnimated.

Espero que esto ayude !

También puedes simplemente usar

 [self.mapView showAnnotations:annotations animated:YES]; self.mapView.camera.altitude *= 1.4; 

para alejar un poco. Funciona bien para mi

Comenzando con iOS8, MKMapView tiene una propiedad layoutMargin . Cuando se establece esto, showAnnotations: y todos los methods que intentan ajustarse a un rectángulo dentro de la vista de map tendrán en count los márgenes de layout mencionados anteriormente.

Si su vista translúcida tiene 40 puntos de altura y está unida a la parte superior de la vista del map, las configuraciones mapView.layoutMargin = UIEdgeInsetMake(40, 0, 0, 0) harán la magia.

Si se dirige a iOS7, la vista de map usa la guía de layout superior e inferior de su controller que contiene para compensar también su contenido. Por lo tanto, puede anular el método topLayoutGuide del controller para devolver la longitud deseada.

 class ViewController: UIViewController { override var topLayoutGuide: UILayoutSupport { return MapLayoutGuide(length: 40) } } class MapLayoutGuide: NSObject, UILayoutSupport { var length: CGFloat init(length: CGFloat) { self.length = length super.init() } @available(iOS 9.0, *) var bottomAnchor: NSLayoutYAxisAnchor { return NSLayoutYAxisAnchor() } @available(iOS 9.0, *) var topAnchor: NSLayoutYAxisAnchor { return NSLayoutYAxisAnchor() } @available(iOS 9.0, *) var heightAnchor: NSLayoutDimension { return NSLayoutDimension() } }