Swift転職なら=>【LevTech】
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

頭痛が減ったので共有です!

rebuild.fmを応援しています!

HOME > CLLocationManagerで現在位置を取得

CLLocationManagerで現在位置を取得

仕事で現在地の経度緯度データを取得する作業があったのでメモ。

サンプル画像

CLLocationManagerのクラス階層


NSObject

CLLocationManager

>参考:CoreLocation Framework Reference CLLocationManager Class Reference
参考:001 現在の位置情報の取得
参考:Swiftで現在地を取得してみた
参考:Swiftで現在地の緯度経度と住所を取得

やってみた

あっさりしたシンプルなサンプルがなかったので省略型です。

(シュミレータだと成功しないので注意です!地味にハマってしまいました。。。)



import UIKit
import CoreLocation

class ViewController: UIViewController , CLLocationManagerDelegate{
    
    var myLocationManager:CLLocationManager!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
         // 現在地を取得します
        myLocationManager = CLLocationManager()
        myLocationManager.delegate = self
        myLocationManager.desiredAccuracy = kCLLocationAccuracyBest
        myLocationManager.distanceFilter = 100
        myLocationManager.startUpdatingLocation()
        
    }
    // 位置情報取得成功時に呼ばれます
    func locationManager(manager: CLLocationManager!,didUpdateLocations locations: [AnyObject]!){
        println("緯度:\(manager.location.coordinate.latitude)")
        println("経度:\(manager.location.coordinate.longitude)")
    }
    
    // 位置情報取得失敗時に呼ばれます
    func locationManager(manager: CLLocationManager!,didFailWithError error: NSError!){
        print("error")
    }
    
}

上記のコードで経度緯度は取得できます。CLLocationManagerはその他プロパティによる設定調整が可能ですのでリファレンスを ご参照ください。

注意!info.plistに以下を追加しないと動作しませんので必ず追加してください。

サンプル画像

KeyがNSLocationAlwaysUsageDescriptionで値は何でもかまいません。ダイアログ表示される際に 表示される文字列です。

カスタマイズ

位置情報を取得するにはユーザ必要なのですが、初回アクセス時に表示される「位置情報取得を許可しますか?」の ダイアログを「許可しない」にすると次回から表示されなくなり必要な場合に面倒なのですが、その場合にもダイアログが表示されるようにする為に statusコードをみて判断する方法です



import UIKit
import CoreLocation

class ViewController: UIViewController , CLLocationManagerDelegate{
    
    var myLocationManager:CLLocationManager!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        myLocationManager = CLLocationManager()
        myLocationManager.delegate = self
        
         // 承認されていない場合はここで認証ダイアログを表示します.
        let status = CLLocationManager.authorizationStatus()
        if(status == CLAuthorizationStatus.NotDetermined) {
            println("didChangeAuthorizationStatus:\(status)");
            self.myLocationManager.requestAlwaysAuthorization()
        }
        
        myLocationManager.desiredAccuracy = kCLLocationAccuracyBest
        myLocationManager.distanceFilter = 100
        myLocationManager.startUpdatingLocation()
    }
    
    // 現状のステータス状態を表示します
    func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
        println("didChangeAuthorizationStatus");
        var statusStr = "";
        switch (status) {
            case .NotDetermined:        statusStr = "NotDetermined"
            case .Restricted:           statusStr = "Restricted"
            case .Denied:               statusStr = "Denied"
            case .Authorized:           statusStr = "Authorized"
            case .AuthorizedWhenInUse:  statusStr = "AuthorizedWhenInUse"
        }
        println(" CLAuthorizationStatus: \(statusStr)")
    }
    
    // 位置情報取得成功時に呼ばれます
    func locationManager(manager: CLLocationManager!,didUpdateLocations locations: [AnyObject]!){
        println("緯度:\(manager.location.coordinate.latitude)")
        println("経度:\(manager.location.coordinate.longitude)")
    }
    
    // 位置情報取得失敗時に呼ばれます
    func locationManager(manager: CLLocationManager!,didFailWithError error: NSError!){
        print("error")
    }
    
}

まとめ

サンプルが長いものが多かったので最小限のコードでの共有でした

↓こんな記事もありますよ!

デバッグ時とリリース時に処理を変更する#ifdef DEBUG のやり方

DEBUG時だけ特定の動作をさせて、リリース時に排除したい、そんな時に利用する方法です。Swiftでは標準ではDEBUGとリリースの判断がつかないので、 コンパイル時に設定する必要があります

SqliteのDBファイル保存+レビュー却下

2回既にレビューを通過していたアプリが、バイナリレビューで却下されてしまいました。理由は、2.23 Details On launch and content download, your app stores 26.48MB on the user's iCloud, which does not comply with the iOS Data Storage となっていてiCouldに保存される量にしては多いから管理してください、といった旨の内容でした。別に却下理由に難癖つけるつもりではないのですが、最初のレビュー時にいってほしい。。。

WatchKitでAppleWatch開発

AppleのティムクックCEOがAppleWatchの発売が2015年4月と発表しましたね!あと2ヶ月ですので、本日からWatchKitを重点的に記事を記載していってアプリを 同時に開発してけたらと思います。
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!