2016-03-27 43 views
8

'da XCode v7.2.1, Simulator v9.2 kullanıyorum.Basit harita projem, konumumla simülatör

:

import UIKit 
import MapKit 

class LocationVC: UIViewController, MKMapViewDelegate { 
    @IBOutlet weak var map: MKMapView! 

    let locationManager = CLLocationManager() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     map.delegate = self 
    } 

    override func viewDidAppear(animated: Bool) { 
     if CLLocationManager.authorizationStatus() == .AuthorizedWhenInUse { 
      map.showsUserLocation = true 
     } else { 
      locationManager.requestWhenInUseAuthorization() 
     } 
    } 

} 

Ben NSLocationWhenInUseUsageDescription aşağıda gösterildiği gibi Info.plistyılında ekledik:

Bir harita & & Harita üzerinde göstermek konumum olsun gerekiyordu gösteren bir UIViewController var

enter image description here

Ayrıca Debug -> Konum -> Özel Konum ... seçeneğini seçtim veuzunluğunu ayarladım Helsinki, Finlandiyaenlem aşağıda gösterildiği gibi: enter image description here

Uygulamamı çalıştırmak , harita gösterilmektedir, ancak konumumu almaz. Niye ya? (Yani haritanın herhangi bir yerinde mavi noktayı göremiyorum).

benim app çalışırken ben de çalıştı

===== GÜNCELLEME ==== ancak bu da yardımcı olmuyor.

+0

Sen belirlesin eklemek zorunda 'showsUserLocation = TRUE Neyse, önce kullanıcıdan izin sormak istemiyor koşulu – Azat

+0

tarafından daha sonra yerini göstermek. Her neyse, şartlı kodumda da yanlış bir şey yok. –

+0

Aşağıdaki durumu göz önünde bulundurun: kullanıcı denetleyiciyi açar, konumu kullanmayı kabul eder, 'requestWhenInUseAuthorization()' işlemini gerçekleştirirsiniz, ancak bundan sonra hiçbir şey olmuyor, harita üzerinde konumunuzu gösterecek başka kod yok, böylece kullanıcı bunu bir dahaki sefere mavi noktayı görecek denetleyici – Azat

cevap

7

, kullanıcının bulunduğu yeri soruyorsunuz, ancak yanıtla aslında hiçbir şey yapmıyorsunuz. konum yöneticisinin temsilcisi olmak ve yetki değişikliğine cevap vermek.

bu kod 7.2.1 üzerinde benim için çalışıyor (Debug "Apple" seçtikten sonra -> Konum): Ben @Casey 'ın yanıta katılabilir, ancak bazen biraz yapmanız gereken

import UIKit 
import MapKit 

class ViewController: UIViewController, CLLocationManagerDelegate { 
    @IBOutlet weak var map: MKMapView! 

    let locationManager = CLLocationManager() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     locationManager.delegate = self 
    } 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 

     if CLLocationManager.authorizationStatus() == .AuthorizedWhenInUse { 
      map.showsUserLocation = true 
     } else { 
      locationManager.requestWhenInUseAuthorization() 
     } 
    } 

    func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
     guard status == .AuthorizedWhenInUse else { print("not enabled"); return } 
     map.showsUserLocation = true 
    } 
} 
0

CLLocationManagerDelegate yöntemiyle daha fazla.

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    if let location = locations.first { 
     //reset mapView's center in case your custom location was wrong. 
     map.centerCoordinate = location.coordinate 
     //mannual call show annotations to avoid some bugs 
     map.showAnnotations(map.annotations, animated: true) 
    } 
} 
0

sadece

locationManager.delegate = self 
mapView.showsUserLocation = true