tag attribute ios objective-c mapkit apple-maps

ios - tag - html title attribute



¿Cómo especifico el nivel de zoom cuando uso un MKUserTrackingBarButtonItem? (2)

Estoy usando un botón MKUserTrackingBarButtonItem para permitir al usuario rastrear automáticamente su ubicación en un mapa. El problema es que cuando tocan este botón, se aleja demasiado. Quiero que comience en un nivel de zoom específico (es decir, intervalo). ¿Cómo puedo conseguir esto?

Cuando el usuario toca el botón para cambiar a MKUserTrackingModeFollow , parece usar el mismo nivel de zoom al que el usuario cambió manualmente (es decir, mediante gestos en el mapa). Intentar especificar un nivel de zoom diferente a través de setRegion o setVisibleMapRect no afecta el nivel de zoom que se usará cuando se cambie el modo a MKUserTrackingModeFollow .

Intentando override mapView:didChangeUserTrackingMode: para establecer la región hace que el modo vuelva a MKUserTrackingModeNone a MKUserTrackingModeNone . Ejemplo:

- (void)mapView:(MKMapView *)mapView didChangeUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated { if (mode == MKUserTrackingModeFollow) { CLLocationCoordinate2D center = mapView.userLocation.location.coordinate; MKCoordinateSpan span = MKCoordinateSpanMake(0.002306, 0.001717); [mapView setRegion:MKCoordinateRegionMake(center, span) animated:YES]; // [mapView setUserTrackingMode:MKUserTrackingModeFollow animated:NO]; } }

Si intento restablecer el modo inmediatamente después de configurar la región, funciona bien si el usuario está parado, pero se aleja si el usuario se está moviendo.

La solución más sencilla sería si hubiera una manera de especificar simplemente algo como un nivel de zoom para MKUserTraking enviándolo a mi valor de rango. Sin embargo, dado que eso no parece existir, ¿qué más puedo hacer?


Tuve el mismo problema y utilicé un enfoque diferente para solucionarlo. Puede utilizar la función MapCamera para esto en lugar de ese botón.

En cada nueva ubicación haga esto:

MKMapCamera *newCamera = [MKMapCamera cameraLookingAtCenterCoordinate:[newLocation coordinate] fromEyeCoordinate:[oldLocation coordinate] eyeAltitude:2000]; [mapView setCamera:newCamera animated:TRUE];

Y jugar con la actitud del ojo.

Si el usuario amplía o reduce la imagen manualmente, puede leer el valor de altitud en mapview.camera.altitude, además, no actualice la cámara cuando el usuario esté utilizando el mapa manualmente.


Según la documentación de manzana utilizada aquí.

https://developer.apple.com/reference/mapkit/mkmapview/1616208-usertrackingmode

La configuración del modo de seguimiento para seguir o seguir con Encabezado hace que la vista del mapa centre el mapa en esa ubicación y comience a rastrear la ubicación del usuario. Si el mapa se aleja, la vista del mapa se acerca automáticamente a la ubicación del usuario, cambiando efectivamente la región visible actual.

Aquí cambiar la región no afecta a su región visible debido a esa razón.

- (void)mapView:(MKMapView *)mapView didChangeUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated { if (mode == MKUserTrackingModeFollow) { CLLocationCoordinate2D center = mapView.userLocation.location.coordinate; MKCoordinateSpan span = MKCoordinateSpanMake(0.002306, 0.001717); [mapView setRegion:MKCoordinateRegionMake(center, span) animated:YES]; // [mapView setUserTrackingMode:MKUserTrackingModeFollow animated:NO]; } }

Así que solo necesitas cambiar la coordenada central en didChangeUserTrackingMode lugar de cambiar toda la región

- (void)mapView:(MKMapView *)mapView didChangeUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated { if (mode == MKUserTrackingModeFollow) { [self.mapView setCenterCoordinate:mapView.userLocation.location.coordinate animated:YES]; } } - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation { [self.mapView setCenterCoordinate:mapViewuserLocation.location.coordinate animated:YES]; }

al hacer clic en MKUserTrackingBarButtonItem cambiar el nivel de zoom

CLLocationCoordinate2D center = mapView.userLocation.location.coordinate; MKCoordinateSpan span = MKCoordinateSpanMake(0.002306, 0.001717); [mapView setRegion:MKCoordinateRegionMake(center, span) animated:YES];