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的主要内容,如果未能解决你的问题,请参考以下文章

swift: Swift 中的 SnapKit 不起作用

swift中的 isKindofClass

swift Swift中的变量

swift Swift中的数组

swift SWIFT中的变量

swift Swift4中的Codable