본문 바로가기

iOS/스위프트로 아이폰 앱 만들기

[8장] Map View

728x90

Map View

흔히 접할 수 있는 지도입니다.

직관적인 뷰라서 더 설명할 것도 없는 것 같습니다.

라이브러리에서는 Map Kit View로 사용됩니다.

import MapKit을 해야 사용할 수 있습니다.

 

지도 보여주기

지도를 보여주기 위해서는 CLLocationManagerDelegate를 추가하고 CLLocationManager 객체를 생성합니다.

CLLocationManagerDelegate는 LocationManager에서 발생한 이벤트들을 받는 메서드들을 제공합니다.

CLLocationManager는 core location 관련 기능을 조작할 수 있는 객체입니다.

class ViewController: UIViewController, CLLocationManagerDelegate {
	@IBOutlet var myMap: MKMapView!
	let locationManager = CLLocationManager()
    
    override func viewDidLoad() {
    	super.viewDidLoad()
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()
        myMap.showsUserLocation = true
    }
...

 

지도에 원하는 위치 표시하기

CLLocationDegrees 는 Double형의 type alias입니다.

CLLocationCoordinate2D - 좌표를 표현하는 객체입니다.

MKCoordinateSpan - mapkit의 좌표 크기를 의미하는 객체입니다.

MKCoordinateRegion - 중심이 좌표이고, 보여주는 거리가 span인 객체입니다.

MKMapView에 MKCoordinateRegion 객체를 지정하면 해당 좌표로 지도가 이동하게 됩니다. 

func goLocation(latitudeValue: CLLocationDegrees, longitudeValue: CLLocationDegrees, delta span: Double) -> CLLocationCoordinate2D {
  let pLocation = CLLocationCoordinate2D(latitude: latitudeValue, longitude: longitudeValue)
  let spanValue = MKCoordinateSpan(latitudeDelta: span, longitudeDelta: span)
  let pRegion = MKCoordinateRegion(center: pLocation, span: spanValue)
  myMap.setRegion(pRegion, animated: true)
  return pLocation
}

 

위치의 텍스트 정보를 추출하기

CLGeocoder는 좌표와 위치 정보 간의 정보를 변환하는 인터페이스를 제공합니다.

좌표로부터 정보를 추출하는 reverse geocoding 메소드를 이용해서 위치 텍스트 정보를 placemark 변수로 받습니다.

CLGeocoder().reverseGeocodeLocation(pLocation!, completionHandler: {
  (placemark, error) -> Void in
  let pm = placemark!.first
  let country = pm!.country
  var address: String = country!
  if pm!.locality != nil {
  address += " "
  address += pm!.locality!
  }
  if pm!.thoroughfare != nil {
  address += " "
  address += pm!.thoroughfare!
  }
  self.lblLocationInfo1.text = "현재 위치"
  self.lblLocationInfo2.text = address
})

info.plist

지도를 사용하기 위해서는 웹뷰와 마찬가지로 info.plist를 수정해야합니다.

[Privacy - Location When In Use Usage Description]를 [App needs location servers for stuff.]로 변경합니다.

이 문장은 위치를 사용할 경우 Alert가 발생할 때 표시되는 문장입니다.

 

Reference

https://developer.apple.com/documentation/corelocation/cllocationmanagerdelegate

https://developer.apple.com/documentation/corelocation/cllocationmanager

'iOS > 스위프트로 아이폰 앱 만들기' 카테고리의 다른 글

[10장] Tab bar  (0) 2021.10.17
[9장] Page control  (0) 2021.10.16
[7장] Web View  (0) 2021.10.11
[6장] Alert  (0) 2021.10.11
[5장] Picker View  (0) 2021.10.04