-
CoreLocation 적용하기iOS/iOS 2020. 6. 20. 07:18
안녕하세요! 오랜만에 글을 씁니다 하하 XD
오늘은 유저의 위치를 Core Location을 사용해서 적용해 서버랑 통신을 진행할 건데요.
쭉 진행해보겠습니다!!
Core Location
네. 개발자 문서에는 이렇게 적혀있네요.
Core Location은 주변 아이비컨과 디바이스의 지리적 위치를 제공하는 프레임워크라고 합니다.
프로젝트의 Core Location가 처음으로 실행된다면 gps를 허용 여부에 관한 알림 메시지를 띄워야 합니다.
CLLocationManager
CLLocationManager 클래스는 위치 관련 이벤트를 앱에서 시작하고 중지하는 데 사용하는 오브젝트입니다.
CLLocationManagerDelegate
CLLocationManagerDelegate 프로토콜은 location manager에 연관된 이벤트를 파악하는 데 사용됩니다.
Use Core Location
그럼 본격적으로 사용해보도록 하겠습니다!
info.plist
우선 기기의 위치는 개인정보이기 때문에 반드시 위치 기반 서비스 허용 알림 메시지가 필요합니다.
저는 이렇게 설정했는데요.
앱을 사용할 때 허용, 한 번만 허용, 허용하지 않음 알림을 띄울 겁니다!View Controller
그리고 유저의 latitude와 longtitude를 받아오는 코드를 작성할 겁니다.
import CoreLocation
Core Location을 사용할 View Controller에 import를 해줍니다.
var locationManager: CLLocationManager! var x: String? var y: String?
그리고 CLLoactionManager 변수를 설정해주고, 서버에 전달할 x와 y 변수도 설정해줍니다.
override func viewDidLoad() { super.viewDidLoad() locationManager = CLLocationManager() locationManager.delegate = self locationManager.requestWhenInUseAuthorization() locationManager.desiredAccuracy = kCLLocationAccuracyBest locationManager.startUpdatingLocation() }
viewDidLoad에서 CLLocationManager 객체를 만들어주고, delegate 설정을 해줍니다.
앱이 화면상에 나와있을 동안 위치 정보 승인 허가를 받기 위해 requestWhenInUseAuthorization()을 호출해줍니다.desiredAccuracy는 위치 데이터의 정확도입니다.
kCLLocationAccuracyBestForNavigation : 가장 높은 수준의 정확도. 외부 전원이 연결되어있을 경우에만 사용
kCLLocationAccuracyBest : 배터리로 동작할 때 권장되는 가장 높은 수준의 정확도
kCLLocationAccuracyNearestTenMeters : 10미터 이내의 정확도
kCLLocationAccuracyNearestHundredMeters : 100미터 이내의 정확도
kCLLocationAccuracyNearestKilometer : 1킬로미터 이내의 정확도
kCLLocationAccuracyNearestThreeKilometer : 3킬로미터 이내의 정확도
* 정밀한 정확도는 배터리를 많이 소요한다.마지막으로 startUpdatingLocation()을 통해 사용자의 현재 위치에 대해 업데이트를 합니다.
extension SearchPathVC: CLLocationManagerDelegate { func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { guard let locValue: CLLocationCoordinate2D = manager.location?.coordinate else { return } print(locValue.latitude, locValue.longitude) x = String(format: "%.6f", locValue.longitude) y = String(format: "%.6f", locValue.latitude) } }
그 후에 CLLocationManagerDelegate를 설정해주어야 하는데, coordinate로 좌표가 들어오기 때문에 guard let 구문을 사용해서 옵셔널 처리를 해줍니다.
그리고 저의 경우에는 서버에 x, y로 넘겨주어야 해서 x랑 y에 스트링 포맷 설정을 해주어서 넣어주었어요!
Result
처음 앱을 실행하면 이렇게 위치 설정 허용 알림이 뜨는 것을 확인할 수 있습니다.
위치 정보 서비스 허용을 해놓고, 장소를 검색하면 정확한 장소 명, 장소의 종류, 도로명 주소,
현재 위치부터의 거리가 테이블 뷰에 뜨는 것을 확인할 수 있습니다.
(현재 위치로부터의 거리를 구하기 위해서 Core Location을 사용했습니다..!)감사합니다 😊
'iOS > iOS' 카테고리의 다른 글
[iOS] Cell LifeCycle (UITableView, UICollectionView) (1) 2020.08.28 iOS의 데이터베이스 비교 (SQLite, Core Data, Realm) (0) 2020.08.07 URL Session Tutorial: HalfTunes (0) 2020.05.31 UIGraphics를 사용한 간단한 스케치 어플 (0) 2020.05.16 델리게이트 패턴 실습 (0) 2020.03.28