Swift 中的 MapKit
Posted
技术标签:
【中文标题】Swift 中的 MapKit【英文标题】:MapKit in Swift 【发布时间】:2014-08-08 09:45:53 【问题描述】:我正在尝试在 Swift 中使用 Map Kit。我尝试在地图上显示该区域、一个大头针和当前位置。所有显示正常,排除当前位置 - 它不显示。
这是一个示例代码:
import UIKit
import MapKit
import CoreLocation
class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate
@IBOutlet weak var mainMapView: MKMapView!
var locationManager = CLLocationManager()
override func viewDidLoad()
super.viewDidLoad()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestAlwaysAuthorization()
var userLocation = MKUserLocation()
println("Location: \(userLocation.location)")
var objectLatitude = 53.204526
var objectLongitude = 50.111751
var currentLatitude = 53.203715
var currentLongitude = 50.160374
var latDelta = 0.01
var longDelta = 0.01
var currentLocationSpan: MKCoordinateSpan = MKCoordinateSpanMake(latDelta, longDelta)
var currentLocation: CLLocationCoordinate2D = CLLocationCoordinate2DMake(currentLatitude, currentLongitude)
var currentRegion: MKCoordinateRegion = MKCoordinateRegionMake(currentLocation, currentLocationSpan)
self.mainMapView.setRegion(currentRegion, animated: true)
var objectLocation: CLLocationCoordinate2D = CLLocationCoordinate2DMake(objectLatitude, objectLongitude)
var objectAnnotation = MKPointAnnotation()
objectAnnotation.coordinate = objectLocation
objectAnnotation.title = "St. George's Church"
objectAnnotation.subtitle = "Church of the Great Martyr St. George"
self.mainMapView.addAnnotation(objectAnnotation)
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
行println("Location: \(userLocation.location)")
显示Location: nil
确保地理定位的所有必要措施:
【问题讨论】:
请注意,您不应自己创建MKUserLocation
的实例(例如var userLocation = MKUserLocation()
)。地图视图将在内部创建一个实例。您应该使用 userLocation 属性或在 didUpdateUserLocation 或 didUpdateLocations 委托方法中读取位置。
谢谢大家 - 我已经解决了这个问题。你能帮我解决这段代码中的另一个问题吗?这是问题的链接:***.com/questions/25202613/mapkit-in-swift-part-2
【参考方案1】:
解决了。只需添加以下内容:
locationManager.startUpdatingLocation()
几秒钟后在模拟器中一切正常。
【讨论】:
【参考方案2】:NSLocationAlwaysUsageDescription
应该是一个包含显示给用户的文本的字符串。您已将其声明为布尔值。
您是在模拟器中运行它吗? XCode 6 Beta 5 存在问题:位置模拟不起作用(请参阅发布说明):
位置功能可能无法在模拟器中使用。 (17858614)
【讨论】:
确实 key 不是布尔值,实际上应该设置为用户能够理解的原因。但从技术上讲,它只需要将其设置为某个值,这样“YES”就可以工作(“NO”或“foo”也可以)。以上是关于Swift 中的 MapKit的主要内容,如果未能解决你的问题,请参考以下文章