ios
[ios - Swift] MapView 사용하기 (MKMapView 1 / 2)
POKY_0908
2020. 12. 22. 17:21
이번 글에서는 MapView 이용한 간단한 위치 앱을 만들어 보도록 하겠습니다.
init.plist 에서 지도 권한을 요청할 수 있도록 추가합니다.
화면 구성은 다음과 같은 뷰로 구성되어있고 사용하려는 목적은 아래와 같습니다.
Segmented Control : 현 위치와 특정 위치로 이동합니다.
CollectionView : 맵 뷰에 나타나는 지역에서 해당하는 특정 건물을 찾습니다.
Label : 현 위치와 주소를 보여줍니다.
이제 viewDidLoad에서 델리게이트 및 권한 요구 코드를 작성해 주도록 합니다.
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
mapkit.delegate = self
locationManager.delegate = self
// 정확도 설정 - 최고로 높은 정확도
locationManager.desiredAccuracy = kCLLocationAccuracyBest
// 위치 데이터 승인 요구
locationManager.requestWhenInUseAuthorization()
// 위치 업데이트 시작
locationManager.startUpdatingLocation()
// 사용자 위치 보기 설정
mapkit.showsUserLocation = true
// 줌 가능 여부
// mapKit.zoomEnabled = false
// 스크롤 가능 여부
// mapKit.scrollEnabled = false
// 회전 가능 여부
// mapKit.rotateEnabled = false
// 각도 가능 여부
// mapKit.pitchEnabled = false
}
현 위치를 클릭할 경우 특정 위치로 이동하고 해당 위치에 핀을 사용해 표시하도록 하겠습니다.
@IBAction func changeValue(_ sender: UISegmentedControl) {
// "현재 위치" 선택 - 현재 위치 표시
if sender.selectedSegmentIndex == 0 {
// 특정 위치 선택 - 애플 가로수길 표시
} else if sender.selectedSegmentIndex == 1 {
moveLocation(latitudeValue: 37.5207945, longtudeValue: 127.0204729, delta: 0.01)
setAnnotation(latitudeValue: 37.5207945, longitudeValue: 127.0204729, delta: 0.01, title: "가로수길 서비스 센터", subtitle: "서울 강남구 가로수길 43")
self.mainTitle.text = "보고 계신 위치"
self.subTitle.text = "가로수길 서비스 센터"
}
}
구글 지도에서 추출한 위도와 경도 값을 이용해 애플 가로수길 매장 주소를 찾은 후 입력합니다.
delta 값을 이용해서 맵 뷰에서 보이는 스케일 값을 조절할 수 있습니다.
func moveLocation(latitudeValue: CLLocationDegrees, longtudeValue: CLLocationDegrees, delta span: Double) {
let pLocation = CLLocationCoordinate2DMake(latitudeValue, longtudeValue)
let pSpanValue = MKCoordinateSpan(latitudeDelta: span, longitudeDelta: span)
let pRegion = MKCoordinateRegion(center: pLocation, span: pSpanValue)
mapkit.setRegion(pRegion, animated: true)
}
맵 뷰를 해당 좌표로 이동합니다.
func setAnnotation(latitudeValue: CLLocationDegrees, longitudeValue: CLLocationDegrees, delta span :Double, title strTitle: String, subtitle strSubTitle:String) {
mapkit.removeAnnotations(mapkit.annotations)
let annotation = MKPointAnnotation()
annotation.coordinate = CLLocationCoordinate2DMake(latitudeValue, longtudeValue)
annotation.title = strTitle
annotation.subtitle = strSubTitle
mapkit.addAnnotation(annotation)
}
해당 좌표에 Pin을 설치합니다.
특정 위치와 핀이 정상적으로 설치되어있는 것을 확인할 수 있습니다.
다음 글에서는 특정 지역에 검색 기능 및 특정 지역의 주소를 가져오는 방법을 소개하도록 하겠습니다.