본문 바로가기
iOS

맵뷰(MapView)이용하기

by 행운의나무 2018. 4. 14.
728x90
반응형

iOS에서 기본적으로 제공하는 MapKitView를 이용해 구글 지도를 띄워보겠습니다.


1. 프로젝트를 Single View App으로 생성한 뒤. Main.stroyboard로 이동합니다.
    컴포넌트 객체에서 Map Kit View를 끌어다가 놓습니다.

2. 보조 에디터(opt + cmd + enter)를 켜고 MapKit을 끌어다 Outlet변수를 만듭니다.

3. 지도를 편리하게 만들어 줄 수있는 명령어들을 가진 MapKit모듈을 임포트하고, CLLocationManager를 이용할 수 있도록 CLLocationManagerDelegate프로토콜을 상속받습니다.

4. 지도를 띄워주는 역할을 하는 CLLocationManager를 이용하기 위해 객체를 생성합니다.

-CLLocationManager: 위치정보와 관련된 이벤트를 처리하는 역할을 하는 객체

ex) startUpdatingLocation() : 유저의 위치정보를 탐색하여 업데이트하기 
시작함             
      stopUpdatingLocation() : 위치정보 업데이트를 중지함


5. 로케이션 매니저가 현재 띄우는 맵뷰에서 delegate 처리를 할 수 있도록 self로 설정합니다.
    맵뷰의 델리게이트의 역할

- 지도 로딩
- 지도 스크롤
- 어노테이션 뷰와 선택 이벤트 담당
- 에러처리

6. locationManager.desiredAccuracy는 위치 정확도를 설정하는 것으로 kCLLocationAccuracyBest 값이 정확도를 최고로 높여줍니다.

   locationManager.requestWhenInUseAuthorization()은 사용자에게 위치정보 접근인증을 요청합니다.

   locationManager.startUpdatingLocation()을 이용해 사용자 위치정보를 업데이트하기 시작합니다.

   mapView.showUserLocation = true 맵뷰에 사용자의 위치를 마커로 표시해 줍니다.

7. 위치정보는 사용자의 개인정보이므로 함부로 앱이 접근할 수 없습니다. 따라서 위치정보를 접근할 수 있도록 Info.plist에서 설정을 변경해 주어야 합니다. 다음 사진과 같이 Infomation Property List의 옆에 +기호를 눌러 Privacy - Location When In Use Usage Description을 추가해 줍니다.

Privacy - Location When In Use Usage Description 앱을 실행하고 있을 때만 위치 정보 접근하고 이용함
Privacy - Location Usage Description  위치정보를 이용함
Privacy - Location Always Usage Description 항상 위치정보에 접근
Privacy - Location Always and When In Use Usage Description 항상 위치정보에 접근하고 위치정보를 이용함

8. 앱을 실행하면 위치정보에 접근을 요청하는 알림창이 뜹니다 Allow를 눌러주면 앱이 사용자의 위치정보에 접근하여 현재 사용자의 위치를 표시해 줍니다.
저는 제주도에 있기 때문에 제주도에 위치가 잡히는 것을 확인 할 수 있습니다. 참고로 한글로 알림창과 지도를 바꾸기 위해서는 시뮬레이터 혹인 디바이스의 환경설정에서 Language를 한국어로, Region을 대한민국으로 바꾸어주면됩니다.

9. 사용자의 위치를 중심으로 지도를 확대하기 위해서 코드를 추가하겠습니다.

     위도와 경도를 이용해 범위를 설정하도록 하겠습니다.

 -CLLocationCoordinate2DMake(위도, 경도)
   CoreLocation에 속한 함수입니다.
    myLocation의 위도, 경도 값을 파라미터로 받아 데이터 포맷을 맞춰줍니다. 

 -MKCoordinateSpanMake(위도 범위 값, 경도 범위 값)
   MapKit에 속한 함수입니다. 
   myLocation의 delta(범위) 값을 파라미터로 받아 영역(span)을 만들어 주는 역할을 합니다.

-MKCoordinateRegionMake(중심 값, 영역 값)
  MapKit에 속한 함수입니다.
  위경도와 영역 값을 파라미터로 받아 지역값을 생성합니다.

-setRegion(지역값, _)
  지도에 지역을 설정하여 사용자의 위치가 표시되도록 해줍니다.

10. didUpdateLocation을 파라미터로 받는 locationManager함수를 입력합니다.
    가장 최근에 저장된 위치정보를 가져오는 locations.last를 이용해 위치정보를 가져옵니다.
    앞서 생성한 사용자 함수 myLocation을 이용해 위,경도와 범위 값을 파라미터로 입력합니다.
    이때 사용된 (lastLocation?.coordinate.latitud)!에서 ?는 옵셔널을 나타내며
    .로 구분된 값을 나열한 것을 옵셔널 체이닝이라고 합니다.

    옵셔널 체이닝을 이용하면 객체가 상속받은 속성 값들을 손쉽게 가져올 수 있습니다.
    괄호의 마지막에 붙은 느낌표(!)는 옵셔널을 강제로 벗겨내는 역할을 하며,
    값이 존재하지 않는 경우 에러를 발생시킵니다.

    delta는 0에서 1사의 값으로 작은 값으로 갈 수록 확대가 가능합니다.
    여기서 0.01의 값은 1/100의 축척으로 100배의 확대를 나타냅니다.

앱을 실행하면 그림과 같이 사용자의 위치를 중심으로 지도가 확대 된 것을 확인 할 수 있습니다.

아래는 전체 코드이며, github에 소스를 올려 놓도록 하겠습니다. 깃허브가기









반응형

'iOS' 카테고리의 다른 글

탭바(TabBar) 이용하기  (0) 2018.04.17
색 지정 방법  (0) 2018.04.16
맵뷰(MapView)- 핀(어노테이션) 띄우기  (0) 2018.04.14
PickerView이용하기  (0) 2018.04.12
앱 생명주기(App Life Cycle)  (0) 2018.04.07