iOS/UIKit

UIKit ;; Mapkit으로 지도에 현 위치 표시하기 2탄 (유저 현위치 띄우기)

may_wonhui 2022. 11. 13. 16:28

https://may1coding.tistory.com/25

 

UIKit ;; Mapkit으로 지도에 현 위치 표시하기 1탄..

내가 구현을 맡은 뷰!! 지도 하단의 버튼을 눌렀을 때 현재 위치를 지도에 띄워주고, 해당 위치를 하단에 표시해주는 작업이 필요하다. MapKit 사용 이유 지도를 구현할 때는 네이버맵, 카카오맵

may1coding.tistory.com

 

Mapkit으로 지도를 띄우고, 초기 위치까지 보여주는 데는 성공했다.

 

다음은 버튼 클릭 시

1. 유저의 현 위치를 지도에 보여주고

2. 현 위치를 글자로 나타내야 한다.

 


CLLocationManager

 

먼저,

MapView는 단지 지도의 역할(정적)을 하는 것이고,

유저의 위치를 다루기 위해서는 CLLocationManager가 필요하다.

또한, 유저의 위치는 민감 정보이기 때문에 Info.plist에 넣어서 유저에게 해당 정보가 어떻게 사용되는지 설명하고 권한을 받아야 한다.

 

권한 설정은

[TARGETS] - [Info] - [Custom iOS Target Properties] - + 버튼을 통해 삽입할 수 있고

필요한 권한은

Privacy - Location Always and When In Use Usage Description

Privacy - Location When In Use Usage Description

두가지이다.

 

Value에 사용자에게 이 위치 정보가 어떻게 사용되는지 메시지를 입력할 수 있다.

 

 

 


requestWhenInUseAuthorization

 

 

let locationManager = CLLocationManager()
locationManager.requestWhenInUseAuthorization()

 

Info.plist에 넣은 권한은 requestWhenInUseAuthorization 메서드를 통해 사용자에게 요청할 수 있다.

- 상단의 When In Use 부분은 Info.plist 부분에서 유저에 위치 정보가 어디에 사용되는지 등의 메시지를 넣은 Value값이다.

 

 

 

 


showsUserLocation, setUserTrackingMode

 

유저의 현 위치를 보여주기 위해서는

showsUserLocation 메서드와 setUserTrackingMode 메서드가 필요하다.

showsUserLocation 메서드는 지도에서 사용자의 위치를 표시할 것인지를 설정하며, 

해당 메서드의 값을 true로 설정 시 CoreLocation 프레임워크를 이용해 사용자의 위치를 찾고 지도에 표시한다.

 

나는! 이것만 하면 일반적으로 현 위치를 설정했을 때처럼 지도가 이동할 줄 알았는데,

해당 메서드는 유저의 위치를 지도에 표시만 해준다!

화면에 보이는 지도는 여전히 setRegion을 통해 설정해주었던 초기 region만 보여준다.

지도를 내 위치로 이동해보면 이렇게 파란색 심볼과 함께 내 위치가 찍혀있다.

그러면, 할 일은 내 위치가 있는 곳으로 지도를 이동시키는 것이다.

 

 

그래서 필요한 메서드는 setUserTrackingMode!!

해당 메서드는 선택적 애니메이션과 함께 유저의 위치를 추적한다.

 

mode, animated 파라미터로 이루어져 있다.

 

mode는 또 .none(유저 위치를 따라가지 않음), .follow(유저 위치를 따라감), .followWithHeading(유저의 위치와 방향을 따라감)

세 가지 옵션으로 구성되어 있다.

 

 

locationManager.startUpdatingLocation()
mapView.map.showsUserLocation = true
mapView.map.setUserTrackingMode(.none, animated: true)

 

 

결과!