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 |