Jiwift

[iOS/Swift] MapKit 화면 이동 감지 Delegate 본문

iOS Dev/iOS

[iOS/Swift] MapKit 화면 이동 감지 Delegate

지위프트 2024. 4. 15. 00:40
반응형

 MapKit에서 사용자가 화면을 드래그해서 이동하거나 핀치 줌을 통하여 확대 또는 축소를 하는 것을 감지해 주는 Delegate가 있습니다. 

 

self.mapView.delegate = self

 Delegate를 원하는 곳에서 채택해줍니다. 

 

func mapViewDidChangeVisibleRegion(_ mapView: MKMapView) {
    print("mapViewDidChangeVisibleRegion")
}

func mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
    print("regionWillChangeAnimated")
}

func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
    print("regionDidChangeAnimated")
}

 위 Delegate를 함수들을 사용하면 사용자의 동작에 따라서 구현이 가능합니다. 

 

mapViewDidChangeVisibleRegion(_ mapView: MKMapView)

- 지도 이동, 확대, 축소 하는 순간에 호출 

 

mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool)

- 지도 이동, 확대, 축소가 시작되면 호출

 

mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool)

- 지도 이동, 확대, 축소가 끝나면 호출

출력

 

 Print를 출력을 통해서 결과를 확인했습니다.

 

(mapViewDidChangeVisibleRegion은 확인하기 위해서 숫자를 더해가서 계속 호출되고 있음을 확인해 보았습니다. )

 

전체 코드

//
//  MapKitViewController.swift
//  EatCar
//
//  Created by KimJitae on 4/14/24.
//

import UIKit
import MapKit

class MapKitViewController: UIViewController, MKMapViewDelegate {

    let mapView = MKMapView()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        self.mapView.delegate = self

        self.view.addSubview(self.mapView)
        
        // Auto Layout 제약 설정
        self.mapView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            self.mapView.topAnchor.constraint(equalTo: view.topAnchor),
            self.mapView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            self.mapView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            self.mapView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
        ])
    }
    
    
    func mapViewDidChangeVisibleRegion(_ mapView: MKMapView) {
        print("mapViewDidChangeVisibleRegion")
    }
    
    func mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
        print("regionWillChangeAnimated")
    }
    
    func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
        print("regionDidChangeAnimated")
    }
}
반응형