본문 바로가기
ios 뽀개기/ios 강좌

ios 코어 로케이션 프레임워크 예제

by 인생여희 2018. 5. 16.
반응형

ios 코어 로케이션 프레임워크 예제


스토리보트 화면

viewcontroller.swift


import UIKit

import CoreLocation


class ViewController: UIViewController, CLLocationManagerDelegate {

    

    @IBOutlet weak var latitude: UILabel!

    @IBOutlet weak var longitude: UILabel!

    @IBOutlet weak var horizontalAccuracy: UILabel!

    @IBOutlet weak var altitude: UILabel!

    @IBOutlet weak var verticalAccuracy: UILabel!

    @IBOutlet weak var distance: UILabel!

    

    //사용자에게 허가를 구하기 위한 인스턴스

    

    var locationManager: CLLocationManager = CLLocationManager()

    var startLocation: CLLocation!

    

    override func viewDidLoad() {

        super.viewDidLoad()

        locationManager.desiredAccuracy = kCLLocationAccuracyBest //최고의 정확도 설정

        locationManager.delegate = self                         //뷰 컨트롤러를 로케이션 매니저 객체에 대한 앱델리게이트로 선언

        locationManager.requestWhenInUseAuthorization()         // 위치 정보를 추적하기 위한 허가 요청

        locationManager.startUpdatingLocation()                 // 시작

        startLocation = nil

        

    }

    

    @IBAction func resetDistance(_ sender: AnyObject) {

        startLocation = nil

    }

    

    //델리게이트 메서드 구현하기

    //로케이션 매니저가 위치 변화를 인식하면 이 메서드를 호출한다.

    //이 메서드가 호출될때 최근 업데이트 내용을 담고 있는 위치 객체의 배열이 전달된다.

    //가장 최근의 위치 정보를 나타내는 항목은 배열의 마지막 항목이다.

    //이 메서드 시작 -> 배열에서 마지막 위치 객체 추출 -> 그 객체에 포함된 데이터가지고 작업

    func locationManager(_ manager: CLLocationManager,

                         didUpdateLocations locations: [CLLocation])

    {

        let latestLocation: CLLocation = locations[locations.count - 1]

        

        latitude.text = String(format: "%.4f",

                               latestLocation.coordinate.latitude)

        longitude.text = String(format: "%.4f",

                                latestLocation.coordinate.longitude)

        horizontalAccuracy.text = String(format: "%.4f",

                                         latestLocation.horizontalAccuracy)

        altitude.text = String(format: "%.4f",

                               latestLocation.altitude)

        verticalAccuracy.text = String(format: "%.4f",

                                       latestLocation.verticalAccuracy)

        

        if startLocation == nil {

            startLocation = latestLocation

        }

        

        let distanceBetween: CLLocationDistance =

            latestLocation.distance(from: startLocation)

        

        distance.text = String(format: "%.2f", distanceBetween)

    }

    

    func locationManager(_ manager: CLLocationManager,

                         didFailWithError error: Error) {

        //에러 발생

    }


}


결과 


참고로직

    //지도 객체

    var myMap: MKMapView = {

        let map = MKMapView()

        map.translatesAutoresizingMaskIntoConstraints = false

        return map

    }()

    

    //코어 로케이션 프레임워크의 주요 클래스는 CLLocatoinManager 와 CLLocatoin 이다

    //CLLocatoinManager 클래스의 인스턴스는 아래처럼 생성가능하다.

    let locationManager = CLLocationManager()   //지도 매니저 객체

    

    @objc func handleBack(){

        dismiss(animated: true, completion: nil)

    }

    

    override func viewDidLoad() {

        super.viewDidLoad()

        

        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "뒤로", style: .plain, target:self , action: #selector(handleBack))

        

        view.addSubview(myMap)

        

        setMyMapLayout()



        locationManager.delegate = self //locationManager의 델리게이트를 self로 설정

        locationManager.desiredAccuracy = kCLLocationAccuracyBest //정확도를 최고로 설정

        locationManager.requestWhenInUseAuthorization() //위치데이터를 추적하기 위해서 사용자에게 승인 요구

        locationManager.requestAlwaysAuthorization() //백그라운드에서도 사용하겠다 사용 요구

        locationManager.distanceFilter = 1000 // 1000미터 이상의 위치 변화가 생겼을 때 알림을 받는다.

        locationManager.startUpdatingLocation()     // 위치 업데이트 시작

        myMap.showsUserLocation = true              // 위치 보기 값을 true로 설정

        

    }




반응형

댓글