如何在iOS 8中获取当前海拔高度?

4

我在应用程序中需要显示设备的高度,但是我无法找到设备的海拔高度。我尝试了以下方法:

 var locationManager:CLLocationManager = CLLocationManager()

override func viewDidLoad() {

    super.viewDidLoad()
    self.locationManager = CLLocationManager()
    locationManager.requestWhenInUseAuthorization()
    self.locationManager.delegate = self
    self.locationManager.distanceFilter = kCLDistanceFilterNone
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
    self.locationManager.startUpdatingLocation()

}


func locationManager(manager: CLLocationManager!, didUpdateToLocation newLocation: CLLocation!, fromLocation oldLocation: CLLocation!) {
    var alt = newLocation.altitude
    print("\(alt)")
    manager.stopUpdatingLocation()
}

什么都没有显示出来...


1
你在 info.plist 中添加了 NSLocationAlwaysUsageDescription 键吗? - Wyetro
你在 info.plist 中包含了 NSLocationAlwaysUsageDescription 键吗? - AtWork
实际上,OP正在请求使用授权,因此他需要一个NSLocationInUseDescription,或者称为相应的“在使用中”版本。 - Duncan C
是的,我认为func locationManager没有被调用,而且我不知道如何调用它。这是问题吗?@WMios - Malic Of Sdom
@MalicOfSdom,那是你打印的地方,所以需要调用它。 - Wyetro
显示剩余2条评论
1个回答

4
实际上,您没有调用正确的委托方法,您正在调用:locationManager(manager: CLLocationManager!, didUpdateToLocation newLocation: CLLocation!, fromLocation oldLocation: CLLocation!),但会给您想要的内容的是locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
所以,如果您已经将NSLocationWhenInUseUsageDescription键实现到您的Info.plist文件中,并且如果弹出窗口正在显示,则只需删除您的函数并添加此函数,它应该可以工作:
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    guard let lastLocation = locations.last else {
        NSLog("error no last location")
        return
    }
    let altitude = lastLocation.altitude
     // Do what you want with your altitude
}

我还建议你不要在此代理函数内调用 locationManager.stopUpdatingLocation()

希望这能对你有所帮助!

注:此语法适用于Swift 3.0,但我认为你只需要在Swift 2.2的代理函数中删除_即可。


根据AppleDocumentation以米为单位测量的海拔高度。(只读) - Chajmz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接