看这里Finding Altitude in Swift 看看我的代码
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate {
@IBOutlet weak var lbl: UILabel!
var player: AVAudioPlayer?
var locationManager:CLLocationManager = CLLocationManager()
var alt: Double?
@IBOutlet weak var coor: UILabel!
func locationManager(manager: CLLocationManager!, didUpdateToLocation newLocation: CLLocation!, fromLocation oldLocation: CLLocation!) {
alt = newLocation.altitude
var altitude = locationManager.location?.altitude
print("\(altitude)")
manager.stopUpdatingLocation()
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.locationManager = CLLocationManager()
locationManager.requestWhenInUseAuthorization()
self.locationManager.delegate = self
self.locationManager.distanceFilter = kCLDistanceFilterNone
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.startUpdatingLocation()
}
@IBAction func getCoor(_ sender: Any) {
var altitude = locationManager.location?.altitude
coor.text = "\(altitude)"
}
}
为什么它不显示实际的海拔高度而是显示0.0?
答案 0 :(得分:0)
这种代码注定要失败:
func locationManager(manager: CLLocationManager!, didUpdateToLocation newLocation: CLLocation!, fromLocation oldLocation: CLLocation!) {
// ...
manager.stopUpdatingLocation()
}
使用startUpdatingLocation
启动了位置管理员后,您就会在第一次调用didUpdateLocation
时停止位置管理员。但是第一次打电话总是假的,甚至接下来的十几个电话也可能只是热身,因为硬件得到了修复。
如果您的问题是“我在哪里”,请使用requestLocation
,而不是startUpdatingLocation
。它仅调用didUpdateLocation
一次,并且只有当 实际上具有足够好的位置时(可能需要一些时间)。
最后,请注意您的代码在Swift 3中不正确。locationManager(manager:...)
永远不会被调用。 Read the docs了解正确的签名。
答案 1 :(得分:0)
您将newlocation.altitude存储到“alt”变量中,但打印“altitude”。
尝试:print("\(alt)")