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로 설정
}
'ios 뽀개기 > ios 강좌' 카테고리의 다른 글
ios 코어 로케이션 프레임워크로 위치 정보 수집하기 (0) | 2018.05.17 |
---|---|
mkMap을 이용해서 길찾기 기능 구현 (0) | 2018.05.16 |
ios 지도 mkmap 3 - 해당 주소 지도에 표시하기&현재위치 (0) | 2018.05.16 |
ios 지도 mkmap 2 (0) | 2018.05.16 |
ios 지도 mkmap 1 (0) | 2018.05.16 |
댓글