Swift MkMapView로 맵 응용 프로그램 만들기(02) - 현재 위치 가져오기

기사 목록


Swift MkMapView로 지도 애플리케이션을 만들었습니다(기사 일람).

CLLoction Manager를 통해 현재 위치 가져오기


  • CLLocation Manager delegate 등록
    ViewController.swift: CoreLocation 활성화
        import UIKit
        import MapKit
        import CoreLocation
    
    ViewController.swift: CLLocation ManagerDelegate 상속
        class ViewController:   UIViewController,
                                CLLocationManagerDelegate {
    
    ViewController.swift: CLLocation Manager의 멤버 변수 정의
            @IBOutlet var mapView: MKMapView!
            var locManager: CLLocationManager!
    
    ViewController.swift: delegate 로그인
            override func viewDidLoad() {
                super.viewDidLoad()
                // Do any additional setup after loading the view, typically from a nib.
    
                locManager = CLLocationManager()
                locManager.delegate = self
    

  • 현재 위치 업데이트 수신
    ViewController.swift: 현재 위치 업데이트 수신
            func locationManager(_ manager: CLLocationManager, didUpdateLocations locations:[CLLocation]) {
                let lonStr = (locations.last?.coordinate.longitude.description)!
                let latStr = (locations.last?.coordinate.latitude.description)!
    
                print("lon : " + lonStr)
                print("lat : " + latStr)
            }
    
    delegate 설정을 할 때 위치가 변할 때마다 상기 함수는 다시 쓰는 구조와 유사하게 Call됩니다.
    그렇지만 이러다 콜 안 할 거야.
    디버깅을 실행해도 브레이크가 되지 않습니다.


  • 따라서 위치 정보의 사용 허가를 얻다
    Info.plist에 "Provacy-Location When In UseUsage Description"을 추가하고 장치 허가를 받을 때 표시할 문자열을 입력하십시오.

    위치 정보에 대한 라이센스를 요청하고 라이센스가 있으면 CLLocation Manager의 현재 위치 업데이트를 시작합니다.
    ViewController.swift: 위치 정보 사용 허가 받기
            override func viewDidLoad() {
                super.viewDidLoad()
                // Do any additional setup after loading the view, typically from a nib.
    
                locManager = CLLocationManager()
                locManager.delegate = self
    
                // 位置情報の使用の許可を得る
                locManager.requestWhenInUseAuthorization()
                if CLLocationManager.locationServicesEnabled() {
                    switch CLLocationManager.authorizationStatus() {
                    case .authorizedWhenInUse:
                        // 座標の表示
                        locManager.startUpdatingLocation()
                        break
                    default:
                        break
                    }
                }
    
    locManager.다음 Dialog는 re q u estWhen InUseAuthorization()에 표시되므로 Allow를 누릅니다.

    따라서 현재 위치가 업데이트될 때마다 locationManager는 Call을 사용합니다.
    Allow를 선택하면 Dialog가 더 이상 표시되지 않습니다.

  • 기사 목록


    Swift MkMapView로 지도 애플리케이션을 만들었습니다(기사 일람).

    좋은 웹페이지 즐겨찾기