如何在 Mapkit 的其他地方用蓝点显示用户的位置?
How to show user's location with blue dot in other place of Mapkit?
我是swift3&Xcode8的新人,第一次来这里提问。我想在一个 Mapkit 中设置多个引脚,并且我还想在同一个 Mapkit 中同时添加用户的位置。此外,我希望这个 Mapkit 的中心是一个特定的位置,而不是用户的位置。但是,我遇到了一个问题。
我可以在我的 Mapkit 中成功设置这些图钉,但我无法在同一个 Mapkit 中显示用户的位置。如果我尝试将用户的位置设置为这个 Mapkit 的中心,我可以成功地显示用户的位置。我的代码如下所示。
import UIKit
import MapKit
import CoreLocation
class MapVC: UIViewController, CLLocationManagerDelegate {
@IBOutlet weak var MapView: MKMapView!
let manager = CLLocationManager()
func createSpanAndAnnotation() {
let FirstSpan: MKCoordinateSpan = MKCoordinateSpanMake(0.008, 0.008)
let originalLocation:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: 24.942653, longitude: 121.368598)
let EdittedRegion:MKCoordinateRegion = MKCoordinateRegion(center: originalLocation, span: FirstSpan)
MapView.setRegion(EdittedRegion, animated: true)
let TemporaryGarbageCanLatitude = showData().garbageCanLatitudeArray
let TemporaryGarbageCanLongtitude = showData().garbageCanLontitudeArray
let TemporaryGarbageCanDiscription = showData().garbageCanDiscription
// 'showdata' is another class to store my data of garbageCans in another file.
for i in 0...TemporaryGarbageCanLatitude.count-1 {
let garbageCanLocation : CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: TemporaryGarbageCanLatitude[i], longitude: TemporaryGarbageCanLongtitude[i])
let pin = PinAnnotation(title: "Free Garbage Can", subtitle: TemporaryGarbageCanDiscription[i], coordinate: garbageCanLocation)
MapView.addAnnotation(pin)
}
}
//-------------------------------------<Above code could work successfully>-------------------------------------
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
self.MapView.showsUserLocation = true
}
func locationManager2() {
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestWhenInUseAuthorization()
manager.startUpdatingLocation()
}
//--------------------------------<It seems that Above code could not work successfully>--------------------------------
override func viewDidLoad() {
super.viewDidLoad()
createSpanAndAnnotation()
locationManager2()
}
}
我在构建阶段添加了'CoreLocation.framework',我还在info.plist文件中添加了'Privacy - Location When In Use Usage Description'。当我 运行 模拟器时,我还在设置中打开了位置服务。另外,我不住在美国,所以我什至去了 'simulator > Debug > Location > Custom location' 将我的位置更改为我现在住的地方。
但是,在完成上述所有操作后,我仍然无法成功显示用户的位置。谁能帮我解决这个问题?如果有人能帮助我,我将不胜感激!
(我的 Mapkit 屏幕截图在这里,但我模糊了上面的一些机密信息。)
simulator screen shot
我发现我通过更改模拟器中的自定义位置意外地解决了我的问题。我住在东半球,所以我住的地方的经度好像是正的。但是,我最初将经度输入为负值。当我将经度更改为正值时,我的位置成功显示在 Mapkit 上。
感谢所有帮助我解决问题的天才。
我是swift3&Xcode8的新人,第一次来这里提问。我想在一个 Mapkit 中设置多个引脚,并且我还想在同一个 Mapkit 中同时添加用户的位置。此外,我希望这个 Mapkit 的中心是一个特定的位置,而不是用户的位置。但是,我遇到了一个问题。
我可以在我的 Mapkit 中成功设置这些图钉,但我无法在同一个 Mapkit 中显示用户的位置。如果我尝试将用户的位置设置为这个 Mapkit 的中心,我可以成功地显示用户的位置。我的代码如下所示。
import UIKit
import MapKit
import CoreLocation
class MapVC: UIViewController, CLLocationManagerDelegate {
@IBOutlet weak var MapView: MKMapView!
let manager = CLLocationManager()
func createSpanAndAnnotation() {
let FirstSpan: MKCoordinateSpan = MKCoordinateSpanMake(0.008, 0.008)
let originalLocation:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: 24.942653, longitude: 121.368598)
let EdittedRegion:MKCoordinateRegion = MKCoordinateRegion(center: originalLocation, span: FirstSpan)
MapView.setRegion(EdittedRegion, animated: true)
let TemporaryGarbageCanLatitude = showData().garbageCanLatitudeArray
let TemporaryGarbageCanLongtitude = showData().garbageCanLontitudeArray
let TemporaryGarbageCanDiscription = showData().garbageCanDiscription
// 'showdata' is another class to store my data of garbageCans in another file.
for i in 0...TemporaryGarbageCanLatitude.count-1 {
let garbageCanLocation : CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: TemporaryGarbageCanLatitude[i], longitude: TemporaryGarbageCanLongtitude[i])
let pin = PinAnnotation(title: "Free Garbage Can", subtitle: TemporaryGarbageCanDiscription[i], coordinate: garbageCanLocation)
MapView.addAnnotation(pin)
}
}
//-------------------------------------<Above code could work successfully>-------------------------------------
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
self.MapView.showsUserLocation = true
}
func locationManager2() {
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestWhenInUseAuthorization()
manager.startUpdatingLocation()
}
//--------------------------------<It seems that Above code could not work successfully>--------------------------------
override func viewDidLoad() {
super.viewDidLoad()
createSpanAndAnnotation()
locationManager2()
}
}
我在构建阶段添加了'CoreLocation.framework',我还在info.plist文件中添加了'Privacy - Location When In Use Usage Description'。当我 运行 模拟器时,我还在设置中打开了位置服务。另外,我不住在美国,所以我什至去了 'simulator > Debug > Location > Custom location' 将我的位置更改为我现在住的地方。
但是,在完成上述所有操作后,我仍然无法成功显示用户的位置。谁能帮我解决这个问题?如果有人能帮助我,我将不胜感激!
(我的 Mapkit 屏幕截图在这里,但我模糊了上面的一些机密信息。) simulator screen shot
我发现我通过更改模拟器中的自定义位置意外地解决了我的问题。我住在东半球,所以我住的地方的经度好像是正的。但是,我最初将经度输入为负值。当我将经度更改为正值时,我的位置成功显示在 Mapkit 上。
感谢所有帮助我解决问题的天才。