2011-06-04 32 views
5

En mi aplicación para el iPhone, tengo la siguiente lógica:aplicación para el iPhone: Preguntas sobre la interacción entre CLLocationmanager y MKMapView (que muestran la ubicación del usuario actual)

  1. inicio CLLocationManger (el usuario puede suministrar parámetros de precisión y distancia filtros a locationmanager, ya que no se requiere la mejor precisión en mi caso, 100-300 metros funcionarán bien, y me gustaría ahorrar batería en esto).

  2. Después de que GPS LocationManager (y solo si se obtiene esta corrección), creo y visualizo el mapa. Tanto CLLocationManager como MKmapView son parte del mismo ViewController. Para mostrar la ubicación actual, configuro mapView.showsUserLocation: YES, para mostrar el punto azul. El LocationManager que comencé aún sigue funcionando, obteniendo actualizaciones de GPS.

documentación de Apple dice esto en MKMapView showsUserLocation:

Establecer esta propiedad en sí provoca la vista del mapa a utilizar el marco de Core Location para encontrar la ubicación actual. Siempre que esta propiedad sea SÍ, la vista del mapa continúa rastreando la ubicación del usuario y la actualiza periódicamente.

No hay palabras sobre qué precisión o filtro de distancia está utilizando para la ubicación actual de MKMapView. Me parece que en este punto, tengo tanto el locationManager I started y el propio locationManager de mapView, ¡actualizando las ubicaciones!

Recuerde, quería ahorrar algo de batería, configurando la precisión y el filtro de distancia? ¿Estos parámetros serán respetados por el locationManager de mapView?

Además, ¿estos dos administradores de ubicación van a estar sincronizados uno con el otro? Actualizo el mapa para centrarlo con las nuevas coordenadas de GPS que obtiene mi locationManager original. Pero también quiero que el punto azul sea visible en el centro del mapa. ¿Se actualizará también, cada vez, ya que tengo showUserLocation de mapView establecido en TRUE?

Agradecería a cualquiera que tenga pistas sobre esto.

+4

acepta alguna respuesta ... – Jhaliya

Respuesta

10

Mi comprensión (basada en lo que veo, no en la documentación porque parece que no encuentro ninguna que cubra esto) es que la propiedad showsUserLocation hace que el mapView inicie una instancia CLLocationManager usando la configuración de precisión más alta (1m distancia filtrar, mejor precisión), y luego actualizar su vista de anotación de círculo azul a medida que el administrador de ubicación devuelve las actualizaciones. También actualiza una superposición circular basada en la precisión horizontal de las actualizaciones de ubicación. Creo que esta instancia de CLLocationManager es independiente de cualquiera que pueda iniciar usted mismo, porque también ejecuto un CLLocationManager en paralelo y no veo ninguna interferencia de las actualizaciones de ubicación actual de la vista del mapa.

Por lo tanto, si usted no desea que el MKMapView para ejecutar su propio gran precisión instancia del gestor de ubicación, a continuación, desactivar showsUserLocation y crear y actualizar manualmente su propia ubicación actual MKAnnotationView en función de sus CLLocationManager 's actualizaciones de ubicación. También puede acercarse a las nuevas actualizaciones según corresponda.

Sé que esto es esencialmente reinventar la rueda, pero creo que es la única manera de obtener la funcionalidad que desea en función de las herramientas que Apple ha proporcionado. Si alguien más sabe lo contrario, por favor repíteme porque también me interesaría.

+0

+1, me gustaría ver una mejor solución para esto también. – chakrit

Cuestiones relacionadas