current annotation ios swift annotations mapkit

ios - annotation - mapkit swift 4



Hacer que el mapa se acerque a la ubicaciĆ³n y anotaciĆ³n del usuario(swift 2) (1)

Simplemente salta directamente a la ubicación del usuario, porque el método didUpdateLocations se llama muchas veces. Hay dos soluciones.

1) Use requestLocation

Si utiliza el método requestLocation lugar de startUpdatingLocation , el método didUpdateLocations se llama solo una vez

if #available(iOS 9.0, *) { locationManager.requestLocation() } else { // Fallback on earlier versions } func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let userLoction: CLLocation = locations[0] let latitude = userLoction.coordinate.latitude let longitude = userLoction.coordinate.longitude let latDelta: CLLocationDegrees = 0.05 let lonDelta: CLLocationDegrees = 0.05 let span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta) let location: CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude) let region: MKCoordinateRegion = MKCoordinateRegionMake(location, span) self.map.setRegion(region, animated: true) self.map.showsUserLocation = true }

2) Usa bandera

var isInitialized = false func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { if !isInitialized { // Here is called only once isInitialized = true let userLoction: CLLocation = locations[0] let latitude = userLoction.coordinate.latitude let longitude = userLoction.coordinate.longitude let latDelta: CLLocationDegrees = 0.05 let lonDelta: CLLocationDegrees = 0.05 let span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta) let location: CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude) let region: MKCoordinateRegion = MKCoordinateRegionMake(location, span) self.map.setRegion(region, animated: true) self.map.showsUserLocation = true } }

Estoy trabajando con mapkit. Quiero que el mapa se agrande para mostrar la ubicación del usuario y el punto anotado, en lugar de solo acercarme a la ubicación actual del usuario.

Actualmente tengo:

let annotation = MKPointAnnotation() annotation.coordinate = CLLocationCoordinate2DMake(mapLat, mapLon) annotation.title = mapTitle self.map.addAnnotation(annotation) func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let userLoction: CLLocation = locations[0] let latitude = userLoction.coordinate.latitude let longitude = userLoction.coordinate.longitude let latDelta: CLLocationDegrees = 0.05 let lonDelta: CLLocationDegrees = 0.05 let span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta) let location: CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude) let region: MKCoordinateRegion = MKCoordinateRegionMake(location, span) self.map.setRegion(region, animated: true) self.map.showsUserLocation = true }

Simplemente se acerca a la ubicación del usuario y se bloquea en la ubicación. Cuando intento desplazarme, solo salta directamente a la ubicación del usuario. ¿Qué estoy haciendo mal? ¿Cómo permito que el usuario haga zoom o se mueva en el mapa sin saltar de nuevo a la ubicación actual?

Estoy intentando acercar para mostrar la anotación y la ubicación del usuario en la misma vista. Incluso si la anotación está muy lejos, quiero que haga un zoom para mostrar tanto al usuario como a la anotación.