iOS9定位獲取經緯度 swift

定位服務是不少程序中都用到的,主要使用CoreLocation庫中的CLLocationManager類和CLLocation類。git

實現結果使用彈窗顯示,以下圖:異步

實現步驟:async

首先,咱們須要在Info.plist文件中添加兩個字段:ide

//始終開啓定位的用戶提示信息NSLocationAlwaysUsageDescription//僅在程序使用時開啓定位的用戶提示信息NSLocationWhenInUseUsageDescription

以下圖,Value爲自定義信息,用來顯示在系統的設置界面中:ui

當程序打開時,若是用戶沒有選擇過是否容許App獲取定位信息,會彈出窗口顯示,在窗口中會顯示NSLocationWhenInUseUsageDescription的內容:spa

在系統的設置-定位中,顯示以下(應用程序說明):線程

如今,能夠開始寫代碼了:代理

import UIKitimport CoreLocationclass ViewController: UIViewController,CLLocationManagerDelegate {

    var locationManager:CLLocationManager!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //若是設備沒有開啓定位服務
        if !CLLocationManager.locationServicesEnabled(){
            dispatch_async(dispatch_get_main_queue()){
                SCMessageBox.showquick(self, contentMsg: "沒法定位,由於您的設備沒有啓用定位服務,請到設置中啓用")
            }
            return
        }
        
        locationManager = CLLocationManager()
        
        //設置精確度
        locationManager.desiredAccuracy = kCLLocationAccuracyBest        //變化距離  超過50米 從新定位
        locationManager.distanceFilter = 50
        //在IOS8以上系統中,須要使用requestWhenInUseAuthorization方法才能彈窗讓用戶確認是否容許使用定位服務的窗口
        if SCDevice.getVersion() >=  8.0 {
        
            //狀態爲,用戶尚未作出選擇,那麼就彈窗讓用戶選擇
            if CLLocationManager.authorizationStatus() == CLAuthorizationStatus.NotDetermined {
                locationManager.requestWhenInUseAuthorization()
                //locationManager.requestAlwaysAuthorization()
            }
            //狀態爲,用戶在設置-定位中選擇了【永不】,就是不容許App使用定位服務
            else if(CLLocationManager.authorizationStatus() == CLAuthorizationStatus.Denied){
                //須要把彈窗放在主線程才能強制顯示
                dispatch_async(dispatch_get_main_queue()){
                    SCMessageBox.showquick(self, contentMsg: "沒法定位,由於您沒有受權本程序使用定位,請至設置中開啓!")
                    return
                }
            }
        }
        //設置定位獲取成功或者失敗後的代理,Class後面要加上CLLocationManagerDelegate協議
        locationManager.delegate = self        
        //開始獲取定位信息,異步方式
        locationManager.startUpdatingLocation()
    }

    func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
        SCMessageBox.showquick(self, contentMsg: "定位發生異常:\(error)")
    }
    
    func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
        if locations.count > 0{ //  使用last 獲取 最後一個最新的位置, 前面是上一次的位置信息
            var locationInfo:CLLocation = locations.last as! CLLocation
            SCMessageBox.showquick(self, contentMsg: "經度:\(locationInfo.coordinate.longitude),緯度:\(locationInfo.coordinate.latitude)")
        }
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }}
相關文章
相關標籤/搜索