swift_02_获取定位
知识点:
1.定位的获取
2.反向地理编码
一、plist权限的配置
源代码编辑条件以下代码
<key>NSLocationWhenInUseUsageDescription</key>
<true/>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<true/>
报错:kCLErrorDomain Code=8 解决方法:不要用模拟器
import UIKit import CoreLocation class ViewController: UIViewController,CLLocationManagerDelegate { let locationLabel = UILabel() let locationStrLabel = UILabel() let geocoder = CLGeocoder() let locationManager = CLLocationManager() override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = UIColor.gray let blurEffect: UIBlurEffect = UIBlurEffect(style: .light) let blurView: UIVisualEffectView = UIVisualEffectView(effect: blurEffect) blurView.frame = self.view.bounds self.view.addSubview(blurView) locationManager.delegate = self locationLabel.frame = CGRect(x: 0, y: 50, width: self.view.bounds.width, height: 100) locationLabel.textAlignment = .center locationLabel.textColor = UIColor.white self.view.addSubview(locationLabel) locationStrLabel.frame = CGRect(x: 0, y: 100, width: self.view.bounds.width, height: 50) locationStrLabel.textAlignment = .center locationStrLabel.textColor = UIColor.white self.view.addSubview(locationStrLabel) let findMyLocationBtn = UIButton(type: .custom) findMyLocationBtn.backgroundColor = UIColor.blue findMyLocationBtn.frame = CGRect(x: 50, y: self.view.bounds.height - 80, width: self.view.bounds.width - 100, height: 50) findMyLocationBtn.setTitle("Find My Position", for: .normal) findMyLocationBtn.setTitleColor(UIColor.white, for: .normal) findMyLocationBtn.addTarget(self, action: #selector(findMyLocation), for: .touchUpInside) self.view.addSubview(findMyLocationBtn) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @objc func findMyLocation() { locationManager.requestAlwaysAuthorization() locationManager.startUpdatingLocation() } func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let locations : NSArray = locations as NSArray let currentLocation = locations.lastObject as! CLLocation let locationStr = "lat:\(currentLocation.coordinate.latitude) lng:\(currentLocation.coordinate.longitude)" locationLabel.text = locationStr reverseGeocode(location:currentLocation) locationManager.stopUpdatingLocation() } ///将经纬度转换为城市名 func reverseGeocode(location:CLLocation) { geocoder.reverseGeocodeLocation(location) { (placeMark, error) in if(error == nil) { let tempArray = placeMark! as NSArray let mark = tempArray.firstObject as! CLPlacemark // now begins the reverse geocode let addressDictionary = mark.addressDictionary! as NSDictionary let country = addressDictionary.value(forKey: "Country") as! String let city = addressDictionary.object(forKey: "City") as! String let street = addressDictionary.object(forKey: "Street") as! String let finalAddress = "\(street),\(city),\(country)" self.locationStrLabel.text = finalAddress } } } }
浙公网安备 33010602011771号