2017-09-11 5 views
-1

J'ai créé l'application de vue unique swift.I placé la MKMapView sur viewController sur main.storyboard .alors i importéAfficher l'emplacement actuel sur MKMapView en utilisant CoreLocation

import MapKit 

en fonction MapVC.In viewDidLoad

mapView.delegate=self 

i fait l'extension MKMapViewDelegate

extension MapVC :MKMapViewDelegate{ 
    func centerMapOnUserLocation() { 
     guard let coordinate = locationManager.location?.coordinate else {return} 
     let coordinateRegion = MKCoordinateRegionMakeWithDistance(coordinate, regionRadius*0.2, regionRadius*0.2) 
     mapView.setRegion(coordinateRegion, animated: true) 

    } 
} 

T quand j'ai couru le projet, j'ai donné ma carte de mon emplacement actuel.

Ne fonctionne pas: 1- Pour la chute de la broche sur l'emplacement actuel de l'utilisateur et le zoom. J'importé

import CoreLocation 

    var locationManager=CLLocationManager() 
    let authorizationStatus=CLLocationManager.authorizationStatus() 
    let regionRadius:Double=1000 

En fonction viewDidLoad

 locationManager.delegate=self 
configureLocationService() 

J'ai fait CLLocationManagerDelegate

extension MapVC:CLLocationManagerDelegate{ 
    func configureLocationService() { 
     if authorizationStatus == .notDetermined{ 
      //app doesnt know whether it is approved or denied 
      locationManager.requestAlwaysAuthorization() 
      //request authorization so location is used always where app opened or not 
     } 
     else 
     { //is determined means :1-already apporoved 2- already denied dont need to do any thing just return 
      return 
     } 
    } 
    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { 
     centerMapOnUserLocation() 
    } 
} 

ne fonctionne pas: 2-I placé un bouton dans le coin inférieur gauche de MKMapView dans viewcontroller de main.storybaord dont la fonction est de placer l'emplacement actuel de l'utilisateur au centre de la vie w contrôleur

@IBAction func centerMapBtnWasPressed(_ sender: Any) { 
     if authorizationStatus == .authorizedAlways || authorizationStatus == .authorizedWhenInUse 
     { 
      centerMapOnUserLocation() 


} 
    } 

Comment puis-je obtenir la broche à l'emplacement de l'utilisateur actuel et obtenir la carte de zoom sur l'utilisateur et l'emplacement actuel et centrer la carte sur l'emplacement de l'utilisateur actuel?

Vous pouvez télécharger le projet de cette link

+0

Qu'est-ce que 'Alamofire' a à voir avec l'affichage emplacement de l'utilisateur? Qu'est-ce qui ne fonctionne pas? Recevez-vous une erreur? –

+0

jusqu'à maintenant Alamofire est non fonctionnel, il suffit de faire le xcworkspace.J'ai écrit le code pour 1- broches à l'emplacement actuel de l'utilisateur 2-zoom carte sur l'emplacement de l'utilisateur 3- sur le bouton presse centre carte sur l'emplacement actuel de l'utilisateur .code ne montre pas ce comportement sur l'exécution - –

+0

Je ne sais pas si j'ai compris. Voulez-vous définir la broche sur l'emplacement de l'utilisateur et le centrer? – GIJOW

Répondre

0

Pour ajouter la broche:

let annotation = MKPointAnnotation() // add it globally so you can remove to update location 

func addPin(coord: CLLocationCoordinate2D) { 
    mapView.removeAnnotation(annotation) 
    let centerCoordinate = CLLocationCoordinate2D(latitude: coord.latitude, longitude:coord.longitude) 
    annotation.coordinate = centerCoordinate 
    annotation.title = "My Pin" 
    mapView.addAnnotation(annotation) 
    centerZoom(annotation) 
} 

Pour effectuer un zoom avant:

func centerZoom(myPoint: MKPointAnnotation) { 
    let mapCenter = myPoint.coordinates 
    let span = MKCoordinateSpanMake(0.1, 0.1) 
    let region = MKCoordinateRegionMake(mapCenter, span) 
    mapView.region = region 
} 

Vous pouvez obtenir des emplacements mise à jour de votre manager emplacement en ajoutant cette méthode de délégué:

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    let loc: CLLocationCoordinate2D = locations.first!.coordinate 
    addPin(loc) 
} 

Ou vous pouvez déléguer votre MapView à votre contrôleur de vue et d'utiliser cette méthode déléguée:

func mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation) { 
    addPin(userLocation.coordinate) 
} 
+0

il y a trois erreur lors de l'utilisation de ce code: 1- func addPin (CLLocationCoordinate2D: coord) {// erreur: Utilisation du type non déclaré 'coord'. 2- func centerZoom (MKPointAnnotation: myPoint) {// erreur: Utilisation du type non déclaré 'myPoint'.3-func mapView (_ mapView: MKMapView, didactdate userLocation: MKUserLocation) { addPin (locations.first) // erreur: utilisation de l'identificateur non résolu 'locations' –

+0

Avez-vous modifié la réponse. – GIJOW

+0

Encore trois erreurs mais à un emplacement différent 1- centerZoom (annotation) ERREUR: Étiquette d'argument manquante 'coord:' dans l'appel 2- let mapCenter = myPoint.coordinates ERREUR: Utilisation de l'identificateur non résolu 'myPoint' 0 addPin (emplacements. premier) . ERREUR: Étiquette d'argument manquante 'coord:' dans l'appel. A partir de ce lien, vous pouvez télécharger le code mis à jour ayant l'erreur ci-dessus dans le fichier MapVC.swift [https://drive.google.com/file/d/0B5pNDpbvZ8SnRVBMLXRUNDZNb2M/view?usp=sharing] –