본문 바로가기

[IOS][SWIFT]

[IOS][SWIFT] 카카오맵(Kakao Map) 커스텀하기!(현재위치, 마커 메소드화)

반응형

안녕하세요:)

오늘은 어제 작성한 카카오맵 띄우기를 커스텀 해본 내용을 작성하기로 했습니다!! 😁

 

먼저 커스텀한 내용을 말씀드리면,

위치 권한 받아와서 현재 위치 보여주기!

(마커를 찍고, 주소를 한글로 받는 것)

새로운 마커를 찍을때 메소드화 시켜 쉽게 생성하기!

 그럼 시작해보겠습니다!!

 

먼저 위치 권한을 받는법을 작성해보겠습니다!

 

제가 적었던 글중에서 카메라와 앨범 권한을 가져오는 글이 있는데 참고하셔도 좋을꺼 같습니다!!

 

먼저 info.plist에 다음과 같이 설정을 해주십니다!!

 

 

설정이 끝나시면 앱을 실행시킬때 최초 권한 설정을 묻는 부분을 설정해 주셔야 합니다~

 

import CoreLocation을 해주시고!

 

var locationManager : CLLocationManager! 선언을 해주신 다음

 

viewDidLoad부분에 다음과 같이 설정을 해주시는데 이때 delegate부분은 ViewController 밖에 따로 선언해주기 위해서

locationManager.delegate = self를 설정해줍니다!!

 

먼저 getLocationUsagePermission 함수는 requestWhenInUseAuthorization을 부르는 함수인데요

이 부분이 권한 체크를 하는 부분인데요 아래 사진과 같이 아까 info.plist에서 설정해준 위치좀 쓸게로 알럿이 나타납니다! 🥰

 

여기서 허용 하시고 앱을 실행시키면 locationManager부분이 작동되어

로그창에 GPS 권한 설정됨으로 나타나게 되겠습니다!

 

자! 이제 두번째 현재 위치 가져오는 부분을 작성해보겠습니다!!

 

먼저 코드는 다음과 같이 CLLocationManagerDelegate부분에 선언해줍니다!

저기서 locations.count - 1인 이유는 배열은 0부터 시작하기 때문에 해준다고 생각하시면 되겠습니다!!

 

그 밑에 let longtitude와 latitude는 각각 경도와 위도를 나타내주는대요!

 

이때 현재 위치의 경도는 location.coordinate.longitude에

위도는 location.coordinate.latitude에 담기게 되겠습니다!!

 

저는 이걸 전역변수로 받아 두려고 간단하게 경도는 lo, 위도는 la로 선언 및 저장해줬는데요!

 

그림과 같이 현재 위치를 변수에 넣어두었습니다!!

( 참고로 이건 예시라서 위로 올렸지만 la, lo는 delegate = self 밑 부분에 선언해주셔야합니다!! 🥰 )

 

 다음은 현재 위치를 한글로 변환하는 과정입니다!

 

먼저 현재 위치를 LocationNow로 저장해주고 이때 경도, 위도는 앞서 저장해놓은 la, lo를 사용하시면 될꺼 같습니다!

그리고 locale에서 내가 사용할 국적을 설정해주시면 되겠습니다!!



그 후에 reverseGeocodeLocation을 이용해서 address를 받아보시면 되는데요!

 

이때 주소를 담고 있는 CLPlacemark를 들어가 살펴보면 아래 사진과 같이 설명이 되어있는데요!

 

이런식으로 각자 다른 변수로 주소가 저장되어 있어서 제가 필요한것만 알아보니 

country - 국적 (ex. 대한민국)

adminstrativeArea - 도시 (ex. 서울특별시)

locality - 동,구 (ex. 관악구)

name - 상세 주소 (ex. 남부순환로 xxx)

이런식으로 표시가 되니 저렇게 작성하고 로그를 한번 찍어보셔서 확인해보시길 추천 드리겠습니다!! 😁

 

자 지금까진 현재위치를 찾아보는 글이였구요

이제 이 현재 위치에 마커를 찍어보고 메소드화 시키는 방법을 알아보겠습니다!!

 

전 글에서 마커 찍는걸 보여드렸는데요 같은 방법으로 먼저 현재위치를 하나 더 찍어보겠습니다!!

 

먼저 이런식으로 앞서 저장해두었던 현재위치의 경도, 위도를 이용해 노란색의 마커를 찍어보았는데

 

전 글에서 마커 찍는 부분을 메소드화 시키면 좋을것 같다는 의견이 있어 도전해봤습니다! 😁

 

 

먼저 완성본은 위와 같이 설정해서 4번째 마커를 찍을수 있었는데

제가 작성하면서 실행해본 몇가지 말씀드리면 처음에 mapPoint부분을 위도 경도를 아래와 같이 따로 받으려고 했습니다!

 

 

이런식으로 위도 경도를 Double 형태로 받아서 작성할수 있었고, 이걸 하면서 mapPoint에는 MTMapPoint의 형식으로

들어가야하는걸 여러 방법으로 해보면서 시행착오가 조금 있었습니다!ㅎㅎ

 

또 생각해봤던게 markerType을 어떤 변수로 받아야할지 몰라서 처음에 Any로 하려다가 다시 생각해보니

아 기본제공되는 Type에 맞춰서 선언해줬고,

 

처음에는 리턴 값 설정을 안해줘서 이렇게 에러가 나던걸 함수 선언 부분에

-> MTMapPOIItem으로 리턴값을 지정해주니 에러 없이 실행 되었습니다!!

 

자 이렇게 최종 실행 시켜본 화면입니다!!

 

사진과 같이 현재 위치는 노란핀으로 4번째로 생성한 마커까지 잘 찍히게 되었습니다!! 😃

 

전 글과 다르게 카카오 맵이 .hybrid 형태로 되어 있는데

맵이 저번 글같은 기본 형태(standard), 위성형태(satellite), 그리고 하이브리드(hybrid)형태가 있으니 한번씩 봐도 재밌으실겁니다!!

 

이번 글을 쓰면서 함수화해서 코드를 간단하게 만들수 있는것도 연습이 많이 필요하구나...... 앞으로도 더 열심히 공부해야겠다!!

라고 생각해서 앞으로도 열심히 글 작성하면서 공부하겠습니다!! 😍

반응형