use*_*930 7 mapkit mkmapview ios swift
我正在编写一个应用程序,我有一个嵌入式mapview来显示用户的位置.到目前为止这是我的代码:
class YourCurrentLocation: UIViewController, CLLocationManagerDelegate {
@IBOutlet weak var mapView: MKMapView!
var locationManager = CLLocationManager()
let regionRadius: CLLocationDistance = 1000
func checkLocationAuthorizationStatus() {
if CLLocationManager.authorizationStatus() == .AuthorizedWhenInUse {
mapView.showsUserLocation = true
centerMapOnLocation(locationManager.location!, map: mapView, radius: regionRadius)
} else {
locationManager.requestAlwaysAuthorization() //requestWhenInUseAuthorization()
}
}
func centerMapOnLocation(location: CLLocation, map: MKMapView, radius: CLLocationDistance) {
let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate,
radius * 2.0, radius * 2.0)
map.setRegion(coordinateRegion, animated: true)
}
override func viewDidLoad() {
super.viewDidLoad()
// mapView.delegate = self
if CLLocationManager.locationServicesEnabled()
{
//locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.requestAlwaysAuthorization()
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startUpdatingLocation()
print("location enabled")
checkLocationAuthorizationStatus()
}
else
{
print("Location service disabled");
}
// Do any additional setup after loading the view.
}
}
Run Code Online (Sandbox Code Playgroud)
我还在我的plist中添加了两个条目:
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
Run Code Online (Sandbox Code Playgroud)
而且在我的xcode中,我已经开始在英国伦敦模拟GPS数据.
当我运行应用程序时 - 我看到地图,但伦敦没有标记.我究竟做错了什么?
顺便说一句,我不得不评论这一行:
//mapView.delegate = self
Run Code Online (Sandbox Code Playgroud)
在viewDidLoad(),否则我有错误:
Cannot assign value of type YourCurrentLocation to type MKMapViewDelegate
Run Code Online (Sandbox Code Playgroud)
而且我不确定这是否是问题的一部分.
我希望在显示到用户地图和该地图上标有其位置的点时实现效果.你能帮帮我吗?
pau*_*lvs 16
代码的问题在于,当用户给出位置权限时,您试图将地图指向用户的位置,而不是等待为CoreLocation您提供实际的用户位置.您需要使用该CLLocationManagerDelegate方法locationManager(_:didUpdateLocations:)时通知您获得了用户的实际位置,并有可以设置地图指向用户的位置.
class ViewController: UIViewController, CLLocationManagerDelegate {
@IBOutlet var mapView: MKMapView!
var locationManager: CLLocationManager?
override func viewDidLoad() {
super.viewDidLoad()
locationManager = CLLocationManager()
locationManager!.delegate = self
if CLLocationManager.authorizationStatus() == .AuthorizedWhenInUse {
locationManager!.startUpdatingLocation()
} else {
locationManager!.requestWhenInUseAuthorization()
}
}
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
switch status {
case .NotDetermined:
print("NotDetermined")
case .Restricted:
print("Restricted")
case .Denied:
print("Denied")
case .AuthorizedAlways:
print("AuthorizedAlways")
case .AuthorizedWhenInUse:
print("AuthorizedWhenInUse")
locationManager!.startUpdatingLocation()
}
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations.first!
let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate, 500, 500)
mapView.setRegion(coordinateRegion, animated: true)
locationManager?.stopUpdatingLocation()
locationManager = nil
}
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
print("Failed to initialize GPS: ", error.description)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11003 次 |
| 最近记录: |