tutorial current annotation iphone objective-c mapkit mkmapview mkannotationview
http://www.servinitup.net/CustomCalloutAnnotation.zip

iphone - current - MKAnnotationView: bloquea la vista de anotación personalizada para fijar las actualizaciones de ubicación



mapkit tutorial (3)

Repaso tu código y mi recomendación es crear una nueva MKAnnotationView personalizada y encapsular ambas vistas (el pin y la llamada).

Pero para su código actual, considere leer la respuesta aprobada a esta pregunta: MKMapView moviendo anotaciones automáticamente: ¿animarlas?

Aclamaciones.

Actualización # 5 Supongo que es tiempo de recompensa. Más de 100 visualizaciones y nadie ha recibido una puñalada, incluso con la muestra de código que publiqué. ¿Qué hay de algunos puntos de reputación!

Actualización # 4 Esta es una pregunta bastante complicada, así que creé un nuevo proyecto basado en pestañas que solo incluye las partes de mi aplicación con las que tengo problemas aquí. Puede descargarlo desde: http://www.servinitup.net/CustomCalloutAnnotation.zip dude en abrirlo (necesita agregar su propio identificador de paquete para ejecutarlo en su teléfono) y juegue con él, y vea si ¡puede hacer que la anotación de leyenda zurcida se mueva con el pin!

Actualización # 3 Traté de hacer que setAnotation sea un método público del tutorial CalloutMapAnnotationView y llamarlo directamente. No tuve suerte. A pesar de las pequeñas rarezas que ocurrieron, lo único que se movió fue la pequeña parte del triángulo del rótulo. No pude obtener toda la llamada para moverme.

Actualización n. ° 2 Todavía no es mucha suerte, pero ahora hemos estado buscando formas de crear programáticamente un "pellizco para ampliar" y luego deshacerlo de inmediato, para que el usuario nunca vea un cambio. Esperar que esto se haga mediante programación tendrá el mismo efecto que hacerlo manualmente, y la anotación del comentario se devolverá a su padre. ¿Algunas ideas?

Actualización # 1 Después de jugar aquí es donde he obtenido: - reemplazado self.calloutAnnotation.coordinate = coords; con self.calloutAnnotation.latitude = coords.latitude;self.calloutAnnotation.longitude = coords.longitude; - Con eso cambiado, si pellizco ligeramente el mapa para acercar o alejar una vez que se ha actualizado el pin, la anotación de la nota se anima a la posición correcta, justo sobre el pin.

Así que ahora necesito descubrir cómo lograr que esto suceda sin que el usuario tenga que pellizcar para hacer zoom.


Publicación original

Yo, junto con otros usuarios de SO, estoy usando esta increíble solución para crear una anotación de texto personalizado: http://blog.asolutions.com/2010/09/building-custom-map-annotation-callouts-part-1/

Cuando utiliza una llamada estándar (anotación-vista.canShowCallout = true) y el pin se mueve alrededor de la pantalla a medida que se actualiza la ubicación, la llamada estándar rastrea junto con el pin, como si estuvieran bloqueados.

Cuando uso la solución de texto destacado personalizada anterior, cuando mi marcador se mueve después de las actualizaciones de ubicación, la anotación de texto permanece en su ubicación original. Por supuesto, me gustaría imitar el estándar de iOS y tener la pista de anotación de llamada personalizada junto con el pin.

Aquí está el código que tengo hasta ahora, que está moviendo con éxito la vista de anotación, pero no la vista de anotación de texto destacado personalizada:

/* core location broadcasts a notification, and my view controller listens to that notification and calls locationManagerDidFindLocation */ - (void)locationManagerDidFindLocation:(NSNotification *)notif { CLLocation *location = [notif.userInfo objectForKey:@"location"]; CLLocationCoordinate2D coords = [location coordinate]; MKCoordinateSpan span = MKCoordinateSpanMake((5/69), (5/69)); MKCoordinateRegion region = {coords, span}; // if we don''t have a current location yet, create one, place it on the map, and adjust the map''s region // otherwise, update the annotation placement and map position in a smooth animation if (self.currentLocationAnnotation == nil) { self.currentLocationAnnotation = [[CurrentLocationAnnotation alloc] initWithCoordinate:coords andTitle:@"My Title" andSubtitle:@"My subtitle"]; [self.mapView addAnnotation:self.currentLocationAnnotation]; [self.mapView setRegion:region animated:true]; [self.mapView regionThatFits:region]; } else { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.45]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; // this moves my annotation view perfectly self.currentLocationAnnotation.coordinate = coords; // ******* this is where my problem is // ******* this custom callout annotation view stays // ******* in it''s original place, even though it''s // ******* parent annotation view is moving around the screen self.calloutAnnotation.coordinate = coords; [self.mapView setRegion:region animated:true]; [self.mapView regionThatFits:region]; [UIView commitAnimations]; } }


Sé que no te va a gustar esta respuesta, pero funciona . La muestra a la que se ha vinculado solo dibuja una imagen personalizada en la superposición de la forma más difícil posible (drawRect :). ¿Ha considerado renderizar su superposición una vez en un UIImage, y simplemente establecer la propiedad de la image en una MKAnnotationView muy simple? Incluso si necesita cambiar el contenido periódicamente, como actualizar el número de amigos en una barra, puede volver a dibujar la imagen cuando ocurra el cambio y actualizar la MKAnnotationView apropiada.


Creé un proyecto basado en su CalloutMapAnnotationView demostrando una solución basada en IB. Las teclas de flecha animan el movimiento de la anotación de ubicación y su anotación de llamada. La leyenda ahora también cambia el tamaño automáticamente en función del contenido que se proporciona, y la vista se carga desde una punta separada. ¡Buena suerte!

https://github.com/jacobjennings/JJMapCallout