Estoy aprendiendo a usar el nuevo Swift idioma (sólo Swift, no Objective-C). Para hacer esto, quiero hacer una simple vista con un mapa (MKMapView). Quiero encontrar y actualizar la ubicación del usuario (como en la Apple app de Mapas).

He probado este, pero no pasó nada:

import MapKit
import CoreLocation

class MapView : UIViewController, CLLocationManagerDelegate {

    @IBOutlet weak var map: MKMapView!
    var locationManager: CLLocationManager!

    override func viewDidLoad() {
        super.viewDidLoad()

        if (CLLocationManager.locationServicesEnabled())
        {
            locationManager = CLLocationManager()
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyBest
            locationManager.requestAlwaysAuthorization()
            locationManager.startUpdatingLocation()
        }
    }
}

Podría por favor ayudarme?

InformationsquelleAutor PMIW | 2014-08-22

8 Comentarios

  1. 64

    Tiene que reemplazar CLLocationManager.didUpdateLocations (parte de CLLocationManagerDelegate) para recibir una notificación cuando el administrador de ubicación recupera la ubicación actual:

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        if let location = locations.last{
            let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
            let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
            self.map.setRegion(region, animated: true)
        }
    }

    NOTA: Si tu objetivo es iOS 8 o superior, debe incluir el NSLocationAlwaysUsageDescription o NSLocationWhenInUseUsageDescription clave en su Información.plist para obtener los servicios de ubicación para el trabajo.

    • Gracias por tu respuesta Zisoft. Pero, para utilizar la función, tengo para «salvar» a todos mis nuevos lugares en un tipo de lista ? Entonces, es startUpdatingLocation() suffisant para actualizar la ubicación ? NOTA: Euh… lo siento, pero ¿cómo puedo hacerlo por favor ? :s muchas Gracias !
    • Después de haber llamado startUpdatingLocation una vez, didUpdateLocations se dispara cada vez que un cambio de ubicación se detecta. Usted puede hacer lo que sea necesario con la ubicación, es decir, la guarda en un array para dibujar una ruta en la vista de mapa.
    • ok gracias. Y ¿cómo puedo incluir el NSLocationAlwaysUsageDescription clave en mi Info.plist por favor ?
    • En XCode, haga clic en Información.plist y añadir una nueva fila. Uso NSLocationAlwaysUsageDescription como la clave y el texto que se desea presentar al usuario como valor (Cadena).
    • Ok Gracias ! Y no hay ningún valor ?
    • El valor debe ser una cadena. Este texto muestra el sistema cuando se le pide permiso al usuario para utilizar los servicios de ubicación. Esto es obligatorio en iOS 8.
    • Solo un comentario a la respuesta : no podemos utilizar el .lastde una matriz, por lo que he usado array[count-1]
    • Puede utilizar la matriz.el pasado como de XCode 6 Beta 5.
    • Beta 5.. a la derecha 😉
    • NSLocationWhenInUseUsageDescription también debería funcionar, no?
    • Me gustaría recomendar el uso NSLocationWhenInUseUsageDescription si usted sólo necesita para realizar un seguimiento de la ubicación del usuario cuando la aplicación se está ejecutando. Las personas son más propensos a hacer clic en «Aceptar» de esa manera
    • ¿Sabes cómo hacerlo con GoogleMaps? Debido a que el auto.mapa.setRegion(región, animados: true) no puede trabajar en un GoogleMaps mapView

  2. 26

    100% de trabajo, pasos fáciles y probadas

    Las bibliotecas de importación:

    import MapKit
    import CoreLocation

    conjunto de delegados:

    CLLocationManagerDelegate,MKMapViewDelegate

    Tomar la variable:

    let locationManager = CLLocationManager()

    escribir este código en viewDidLoad():

    self.locationManager.requestAlwaysAuthorization()
    
        //For use in foreground
        self.locationManager.requestWhenInUseAuthorization()
    
        if CLLocationManager.locationServicesEnabled() {
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyBest
            locationManager.startUpdatingLocation()
        }
    
        mapView.delegate = self
        mapView.mapType = .standard
        mapView.isZoomEnabled = true
        mapView.isScrollEnabled = true
    
        if let coor = mapView.userLocation.location?.coordinate{
            mapView.setCenter(coor, animated: true)
        }

    Escribir delegado método para la localización:

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let locValue:CLLocationCoordinate2D = manager.location!.coordinate
    
        mapView.mapType = MKMapType.standard
    
        let span = MKCoordinateSpanMake(0.05, 0.05)
        let region = MKCoordinateRegion(center: locValue, span: span)
        mapView.setRegion(region, animated: true)
    
        let annotation = MKPointAnnotation()
        annotation.coordinate = locValue
        annotation.title = "Javed Multani"
        annotation.subtitle = "current location"
        mapView.addAnnotation(annotation)
    
        //centerMap(locValue)
    }

    No se olvidó de establecer permisos en info.plist

    <key>NSLocationWhenInUseUsageDescription</key>
    <string>This application requires location services to work</string>
    
    <key>NSLocationAlwaysUsageDescription</key>
    <string>This application requires location services to work</string>

    Es de aspecto:

    Mostrar la Ubicación Actual y la Ubicación de la Actualización en MKMapView en Swift

    • Gracias Bro esto es lo que estaba buscando..!!
  3. 20

    Para swift 3 y XCode 8 me parece que esta respuesta:

    • Primer lugar, usted necesita configurar la privacidad en la información.plist. Insertar cadena NSLocationWhenInUseUsageDescription con su descripción de por qué desea obtener la ubicación del usuario. Por ejemplo, el conjunto de la cadena «Para ver el mapa en la aplicación».

    • Segundo, el uso de este código de ejemplo

      @IBOutlet weak var mapView: MKMapView!
      
      private var locationManager: CLLocationManager!
      private var currentLocation: CLLocation?
      
      override func viewDidLoad() {
          super.viewDidLoad()
      
          mapView.delegate = self
      
          locationManager = CLLocationManager()
          locationManager.delegate = self
          locationManager.desiredAccuracy = kCLLocationAccuracyBest
      
          //Check for Location Services
      
          if CLLocationManager.locationServicesEnabled() {
              locationManager.requestWhenInUseAuthorization()
              locationManager.startUpdatingLocation()
          }
      }
      
      //MARK - CLLocationManagerDelegate
      
      func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
          defer { currentLocation = locations.last }
      
          if currentLocation == nil {
              //Zoom to user location
              if let userLocation = locations.last {
                  let viewRegion = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 2000, 2000)
                  mapView.setRegion(viewRegion, animated: false)
              }
          }
      }
    • Tercero, establecer la Ubicación de los usuarios de la bandera en el guión gráfico para mapView.

  4. 7

    MyLocation
    es una forma rápida de iOS Demo.

    Puede utilizar esta demo, por el siguiente:

    1. Mostrar la ubicación actual.

    2. Elegir otro lugar: en este caso detener el seguimiento de la ubicación.

    3. Agregar un empuje el pasador a un MKMapView(iOS) al tocar.

  5. 3

    Para Swift 2, se debe cambiar a la siguiente:

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let location = locations.last
    
        let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude)
        let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
    
        self.map.setRegion(region, animated: true)
    }
  6. 1

    tiene que reemplazar CLLocationManager.didUpdateLocations

     func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    
        let userLocation:CLLocation = locations[0] as CLLocation
        locationManager.stopUpdatingLocation()
    
        let location = CLLocationCoordinate2D(latitude: userLocation.coordinate.latitude, longitude: userLocation.coordinate.longitude)
    
        let span = MKCoordinateSpanMake(0.5, 0.5)
    
        let region = MKCoordinateRegion (center:  location,span: span)
    
        mapView.setRegion(region, animated: true)
    }

    también tienes que añadir NSLocationWhenInUseUsageDescription y NSLocationAlwaysUsageDescription a su plist configuración Result como valor

  7. 0

    Hola, a Veces, la configuración de la showsUserLocation en el código no funciona por alguna extraña razón.

    Así que trate de una combinación de los siguientes.

    En viewDidLoad()

      self.mapView.showsUserLocation = true

    Ir a su guión en Xcode, en el panel de la derecha de los atributos del inspector de la marca de la la ubicación del Usuario casilla de verificación, como en la imagen adjunta. ejecute su aplicación y usted debería ser capaz de ver el la ubicación del Usuario

    Mostrar la Ubicación Actual y la Ubicación de la Actualización en MKMapView en Swift

Dejar respuesta

Please enter your comment!
Please enter your name here