Swift使用CoreLocation,你必須要看這一篇


CoreLocation,在我們這里討論的是一個最常用的東西,就是用Location Manger獲取用戶當前的位置。

整個的來說非常簡單。只要這樣:

import CoreLocation

需要使用整個框架,那么引入整個框架就是必須的。然后需要在你的類里實現一個protocol。就是CLLocationManagerDelegate,並在代碼中實現protocol里的相關方法。分別是這樣喝這樣:

class ViewController: UIViewController, CLLocationManagerDelegate 
    //MARK: CoreLocationManagerDelegate
    func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!){
        println("get location")
        var location:CLLocation = locations[locations.count-1] as CLLocation
        
        if (location.horizontalAccuracy > 0) {
            self.locationManager.stopUpdatingLocation()
            println(location.coordinate)

            self.textLabel.text = "latitude \(location.coordinate.latitude) longitude \(location.coordinate.longitude)"
        }
    }
    
    func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
        println(error)
        self.textLabel.text = "get location error"
    }

這些代碼的功能也很簡單。獲取用戶的經度和緯度,之后在界面的UILabel中顯示出來。

在viewWillAppear中開始獲取地理位置,在viewDidDisappear里停止。手機費電的幾個地方就包括地理位置過度頻繁的更新這一項。所以,一定要記得不用的時候就不要再請求系統的GPS數據。否則,用戶在設置的費電大戶里是看得到的。

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        self.locationManager.startUpdatingLocation()
    }
    
    override func viewDidDisappear(animated: Bool) {
        super.viewDidDisappear(animated)
        self.locationManager.stopUpdatingLocation()
    }

只有這些代碼還是沒有辦法工作的。因為,在iOS8里修改了政策。Look here 

if self.locationManager.respondsToSelector("requestAlwaysAuthorization") {
            println("requestAlwaysAuthorization")
            self.locationManager.requestAlwaysAuthorization()
        }

這個是為了兼容iOS7和iOS8的代碼,加入了一個判斷。在iOS8中需要詢問用戶是否同意使用位置信息,否則的話該功能不可用。那么加這個就可以么?NO!!!還需要在,這里就是重點了。在plist文件里配置一個選項。

說到具體的配置有兩個,分別是:requestWhenInUseAuthorization()和requestAlwaysAuthorization()這兩個請求方法。一個是用戶使用的時候才用到定位,一個是一直在后台獲取更新的定位信息。最后的一個在一定的時候會觸發一個系統的提醒,說這個APP一直在后台獲取你的位置信息是否允許之類的。這兩個請求方法對應的plist配置也不一樣,分別是NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription。至於在plist添加的方法,就是在plist中添加一個鍵值對,然后把請求允許對應的Key值復制粘貼進去就可以了。value值是什么都可以,這個值會在請求允許的對話框中顯示出來給用戶看。總之是你自己定的。

運行你的APP,你會看到請求提示了:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM