2012-04-07 15 views
5

Estoy escribiendo una aplicación iOS 5 que rastrea la ubicación de un usuario en tiempo real, trazando su curso en un MKMapView. Cada vez que se toma una lectura de GPS, me gustaría que se dibujara una polilínea entre las ubicaciones actual y anterior, formando eventualmente una pista (o ruta de navegación) de donde el usuario ha viajado.¿Extiende MKPolylines o crea múltiples MKPolylines?

estoy cómodo con el uso MKPolyline y MKPolylineView para dibujar una pista, suponiendo que tengo todas las CLLocationCoordinate2D coordenadas de antelación, usando un código similar a continuación:

MKPolyline *route = [MKPolyline polylineWithCoordinates:coordinates count:[self.coordinateArray count]];   
[mapView addOverlay:route]; 

Sin embargo, ya que sólo estoy recibiendo el CLLocationCoordinate2D coordenadas en tiempo real (como se llama el método delegado locationManager:didUpdateToLocation:fromLocation:) No estoy seguro de la mejor manera de dibujar las nuevas polilíneas.

¿Puedo ampliar las líneas existentes (es decir, agregar a la matriz coordinates basada en C? Sin tener mucha experiencia C no estoy seguro de cómo hacerlo) o necesito crear una nueva polilínea entre las siguientes dos coordenadas (aunque He oído que tener demasiadas polilíneas individuales en el mapa puede afectar el rendimiento y el uso de la memoria ...)?

Gracias de antemano.

+1

¿Has visto la aplicación de muestra de Apple [Breadcrumb] (http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Introduction/Intro.html)? – Anna

Respuesta

5

Primero, vea how to update MKPolyline/MKPolylineView?, especialmente el enlace al código de muestra Breadcrumb. Puede ser un buen punto de partida para lo que necesita.

Sin embargo, verá que una parte vital de su objeto CrumbPath es una llamada al realloc. Entonces, sí, necesita saber cómo administrar arreglos tipo C si quiere almacenar de manera eficiente sus conjuntos de puntos. Sí, esto no es fácil. Sí, la manipulación de matriz tipo C es una invitación a la pérdida de memoria.

La muestra de Breadcrumb usa realloc para cambiar el tamaño de su matriz. Puede ser un poco más seguro al asignar la memoria que utiliza la matriz con el tipo NSMutableData. Se recomienda como respuesta al Is it ok to use “classic” malloc()/free() in Objective-C/iPhone apps?. Lea las otras soluciones para ver las funciones regulares de C malloc() y free() haciendo el mismo trabajo. Tenga en cuenta que NSMutableData tiene un método muy útil increaseLengthBy:.

Cuando comprenda por qué cada alumno C intenta utilizar sizeof() incorrectamente y cómo usarlo correctamente, comprenderá la gestión de la memoria C.

+0

Gracias por su respuesta (y apuntándome hacia el código de muestra Breadcrumb!). – Skoota

+1

El enlace de ejemplo Breadcrumb está roto. Encontré el nuevo enlace: http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Introduction/Intro.html –

Cuestiones relacionadas