Zoom en marco MKMapView específico

Mi pregunta está relacionada de alguna manera con esta. Pero con iOS7 me pregunto si hay una manera más simple de hacerlo.

Básicamente, tengo un MKMapView funciona con un efecto de paralaje, al igual que la aplicación Foursquare.

introduzca la descripción de la imagen aquí

Entonces, ¿cómo puedo hacer un zoom de todas las annotations en el rectángulo visible de MKMapView ?

En este momento tengo una solución de trabajo, que utiliza algunos valores para compensar la latitud de mis annotations, pero me parece muy extraño hacerlo.


Detalle:

Para darle al map un efecto de paralaje (cuando se desplaza por UITableView , el map también se desplaza), debe mantener una parte del map debajo de la tabla. En mi caso, el frame de mi MKMapView es (0 -120; 320 390) y el marco visible es (0 0, 320 150); . Entonces el objective aquí es poder mostrar las annotations (acercar) en ese frame visible.

Algo así debería funcionar, pero no he probado el código:

 MKAnnotation* firstAnnotaiton = annotations[0]; CLLocationDegrees north = firstAnnotation.coordinate.latitude; CLLocationDegrees south = firstAnnotation.coordinate.latitude; CLLocationDegrees east = firstAnnotation.coordinate.longitude; CLLocationDegrees west = firstAnnotation.coordinate.longitude; for (int i = 1; i < annotations.count; i++) { MKAnnotation* annotation = annotations[i]; if (north < firstAnnotation.coordinate.latitude) north = firstAnnotation.coordinate.latitude; if (south > firstAnnotation.coordinate.latitude) south = firstAnnotation.coordinate.latitude; if (west < firstAnnotation.coordinate.longitude) west = firstAnnotation.coordinate.longitude; if (east > firstAnnotation.coordinate.longitude) east = firstAnnotation.coordinate.longitude; } MKMapPoint upperLeft = MKMapPointForCoordinate(CLLocationCoordinate2DMake( north, west )); MKMapPoint lowerRight = MKMapPointForCoordinate(CLLocationCoordinate2DMake( south, east )); MKMapRect rect = MKMapRectMake( upperLeft.x, upperLeft.y, lowerRight.x - upperLeft.x, lowerRight.y - upperLeft.y ); rect = [self.mapView mapRectThatFits:rect edgePadding:self.boundsInsets]; [self.mapView setVisibleMapRect:rect animated:animated]; 

La key aquí es tener self.boundsInsets ser un UIEdgeInsets especifique la diferencia entre el tamaño real de las vistas y sus límites visibles.