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.