ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ios - Swift] MapView 사용하기 (MKMapView 1 / 2)
    ios 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을 설치합니다.

     

     

     

    특정 위치와 핀이 정상적으로 설치되어있는 것을 확인할 수 있습니다.

     

     

     

     

    다음 글에서는 특정 지역에 검색 기능 및 특정 지역의 주소를 가져오는 방법을 소개하도록 하겠습니다.

     

     

    댓글

Designed by Tistory.