2010-06-28 13 views
12

Creé previamente una burbuja de llamada personalizada como una subvista al MKAnnotationView porque la llamada incorporada es muy limitada. Esto requiere que cambie a centerOffset de MKAnnotationView cuando se selecciona para tener en cuenta el tamaño de la burbuja de llamada. Todo esto funcionó perfectamente antes de que saliera iOS 4. Ahora, con iOS 4, ignora por completo mi actualización de la propiedad centerOffset y, por lo tanto, el pin y la burbuja parecen saltar hacia la derecha (la esquina superior izquierda de la burbuja de llamada ahora está en la ubicación donde debería estar el punto de inserción) .MKMapView ignora la actualización de centerOffset en iOS 4

¿Alguien sabe por qué esto ha cambiado en iOS 4? ¿Hay algo que pueda hacer para que MKMapView reconozca el nuevo centerOffset? ¿Es esto un error que introdujo la manzana?

¡Gracias por la ayuda!

+0

Solo quería lanzarme, encontré el mismo problema. Actualmente he ajustado el centro de anotación para compensar el cambio de compensación. Sin embargo, está lejos de ser ideal. –

Respuesta

0

Creo que en lugar de centerOffset puede usar setRegion que funciona bien en todas las versiones.

CGPoint point = [mapView convertCoordinate:selectedAnnotation.coordinate toPointToView:self.view]; 

CGRect frame = [customView frame]; 
frame.origin.y = point.y - frame.size.height; 
frame.origin.x = point.x - frame.size.width/2; 

MKCoordinateRegion region = [mapView convertRect:frame toRegionFromView:self.view]; 
[mapView setRegion:region animated:YES]; 
+0

No estamos tratando de ajustar la región del mapa, sino el desplazamiento central de la vista de anotación real. –

+0

@Yannick, sí, pero establecer la región con las mismas dimensiones pero una nueva coordenada central RECONECTARÁ el mapa. Yo diría que esta es la respuesta, después de haber tenido el mismo problema que tuviste. – makdad

+2

No es lo que estoy tratando de lograr. La región del mapa actual tiene que permanecer igual. Quiero que la vista de anotación se mueva según su nueva propiedad centerOffset. –

4

Tengo el mismo problema: centerOffset parece tenerse en cuenta solo la primera vez. Se cambió internamente, pero la vista no se mueve, por lo que lo que tiene que hacer es mover la vista usted mismo.

Puede mover la vista ajustando su centro con el desplazamiento requerido: la vista seleccionada permanece alineada en la esquina superior izquierda con la vista no seleccionada, por lo que debe realinear sus centros. Aquí es mi caso:

Seleccionado -> No seleccionado:

self.center = CGPointMake(self.center.x + 56.0, self.center.y + 130.0); 
self.centerOffset = CGPointMake(5.0, -14.0); 

no seleccionados -> seleccionada:

self.center = CGPointMake(self.center.x - 56.0, self.center.y - 130.0); 
self.centerOffset = CGPointMake(64.0, -81.0); 

Donde 130 es la diferencia de altura entre los puntos de vista (punto central está en el fondo) , y 56 es la diferencia entre los desplazamientos X de sus centros.

Recuerde: aún necesita cambiar la compensación del centro porque se tendrá en cuenta al hacer zoom.

Espero que esto ayude, he perdido unas pocas horas en esto. Recuerde enviar un informe de error a Apple.

+0

¡Gracias, esto me ayudó! – elsurudo

+0

funcionó para mí, gracias! –

6

Asegúrese de que está utilizando MKAnnotationView y no MKPinAnnotationView! No puede configurar el centerOffset de un MKPinAnnotationView -object (excepto si tiene una subclase, por supuesto).

Cuestiones relacionadas