[iOS] Framework - Core Location


Core Location


Frameworkはデバイスの地理的位置を取得する機能を提供しています
Core locationは、デバイスの地理的位置、高さ、方向、およびデバイスとの相対的な位置を示すフレームワークです.このフレームワークは、これらの地理情報をwifi、セルラーデータ、gps、Bluetoothなどの通信ネットワークを介して取得する.CLLocationManagerクラスのインスタンスを使用して、コアロケーションサービスを設定、起動、および停止することができる.

CLLocation Managerとは何か..。


位置に関連するイベントのオブジェクトを起動または停止できます.
次の場所ベースのアクティビティをサポートします.
  • ユーザの現在位置の変化を追跡する
  • .
  • コンパスの変化
  • 特定の領域に入るか離れるかを監視し、必要に応じて位置ベースのイベント
  • を作成します.
  • 付近の接続可能なビーコンを教えてあげます.
  • 公式文書には、依頼を特定のオブジェクト(ほとんどがViewController)に委任することでCLLocationManagerを使用できると書かれているようです(では、ViewControllerはCLLocationManagerDelegateを採用すべきでしょうか?)
    コア位置フレームワークは、ビューコントローラのCLLocation Managerの初期化時にCLLocation Managerに関するメソッドを呼び出します.

    これはどのように利用しますか?


    Adding Location Services to Your App


    文書を読んだものの、茫然として戸惑った瞬間、やはりアップル!使い方も親切に教えてくれました!

    Create the Location Manager and Delegate


    前述したように、CLLocationManagerのオブジェクトを作成する必要があります.このインスタンスは、強い参照で構成される必要があります.領域変数として宣言された場合は適切ではありません.これは、すべてのlocation managerオブジェクトが非同期で処理されているため、領域変数として宣言するのは十分ではありません.
    上記のビューコントローラの委任作業も、任意のゾーンサービスが開始される前に完了する必要があります.

    Handle Errors in the Delegate Methods


    ロケーション・サービスが使用できない場合は、失敗に関連するメソッドを使用する必要があります.たとえば、地域モニタサービスが利用できない場合、CCLocation Managerオブジェクトは、locationManager(_: monitoringDidFailFor:withError:)メソッドを呼び出してエラー処理を行う必要があります.場合によっては、ロケーション・サービスが使用できない場合、UIを更新する必要があります.

    Ask for Authorization and Handle Changes


    アプリケーションに対応する権限を設定する必要があります.アプリケーションでロケーションベースの機能を実行すると、ロケーション権限をユーザーに問い合わせることができます.
    location managerオブジェクトを作成すると、locationManager(_:didChangeAuthorization:)と対称なオブジェクトで次の操作を実行できます.
    この方法を使用すると、アプリケーション権限の変更に対応し、変更に伴う他の操作を実行できます.

    Start Location Services and Receive Events


    まず委任対象を実施する.
    イベント転送は、
  • CLLocation Managerを呼び出す適切な方法で開始する必要があります.
  • 委任先は、位置および方向に関する更新を受信する.
  • CLLocation Managerの適切なメソッドを呼び出すことで、アプリケーションのロケーションサービスを停止できます.
  • 場所を設定することで、より正確なサービスを得ることができます.Core Locationは、バッテリ管理機能を提供します.例えば、位置サービスの精度を1キロ以内に設定すれば、gpsの使用を停止し、wifiなどのバッテリー消費の少ない通信機器を使用することで、バッテリーの節約に役立つ.

    直接実施しましょう

    import UIKit
    import CoreLocation
    
    class KarrotMarketHomeViewController: UIViewController {
      private var locationManager: CLLocationManager?
      
      override func viewDidLoad() {
        super.viewDidLoad()
        setUpLocationManager() 
      }
      
      private func setUpLocationManager() {
        locationManager = CLLocationManager()
        locationManager?.requestWhenInUseAuthorization()
        }
    }
    インポートコアの場所から開始する必要があります.
    ロケーション情報を処理できなくても、LocationManagerのrequestWhenInUseAutorization()メソッドのみを呼び出す場合は...位置変換情報を表示するが表示されない...どうしてこんなことになったのか...
    文書をよく読んでください.
    この方法に入って、もう少しよく読むと、次のような文があります.
    The user prompt contains the textfrom the NSLocationWhenInUseUsageDescription key in your app Info.plist , and the presence of that key is required when calling this method.Info.plistは設置されていないので.では今から設定を始めましょう
    <dict>
    	<key>NSLocationWhenInUseUsageDescription</key>
    	<string>가까운 동네를 검색하거나 동네인증을 위해 현재 위치를 확인합니다.</string>
    	<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    	<string>가까운 동네를 검색하거나 동네인증을 위해 현재 위치를 확인합니다.</string>
    常に許可され、アプリケーションの実行時に許可されている場合はkeyとvalueが追加されます.
    そうすれば...ブツブツ~!!

    やっとハッピーポジション権限ポップアップウィンドウが見えました!
    override func viewDidLoad() {
      super.viewDidLoad()
      locationManager?.delegate = self
      setUpLocationManager() 
      }
    extension KarrotMarketHomeViewController: CLLocationManagerDelegate {
      
      
    }
    ViewControllerをロケーションマネージャのエージェントとして委任することで、受信した領域情報に次のことができます.
    [注意]:
    Apple Developer Document | Core Location
    Apple Developer Document | CLLocationManager
    Apple Developer Document | Adding Location Services to Your App