본문 바로가기

차장님의 이야기

SwiftUI에서 MapKit 사용하기

SwiftUI에서 MapKit을 사용 하는 방법을 찾아보고 있었는데.

UIKit을 사용해야지만 가능하다고 한다.

 

그 이유를 보니 SwiftUI는 모든것을 다 구현하지 않았으므로 UIKit을 사용하라고 하고, 기존의 호환성을 위하여 UIKit을 함께 사용 하는

방법을 제공해주고 있었다.

 

UIViewRepresentable 를 상속 받으면 SwiftUI에서 쉽게 사용이 가능하다고 한다.

struct GPSView : UIViewRepresentable {
    let locationManager = CLLocationManager()
    let view = MKMapView()
    
    func makeUIView(context: UIViewRepresentableContext<GPSView>) -> MKMapView {
        view.showsUserLocation = true
        view.userTrackingMode = .followWithHeading
        
        let longtap = UITapGestureRecognizer(target: context.coordinator, action: #selector(context.coordinator.longTap))
        view.addGestureRecognizer(longtap)
        view.delegate = context.coordinator
        
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        
        let zoom = CLLocationCoordinate2D(latitude: 35, longitude: 129)
        
        let viewRegion = MKCoordinateRegion(center: zoom, latitudinalMeters: 200, longitudinalMeters: 200)
        view.showsUserLocation = true
        view.setRegion(viewRegion, animated: false)
        
        return view
    }
    
    func updateUIView(_ uiView: MKMapView, context: UIViewRepresentableContext<GPSView>) {

    }
}

SwiftUI에서 사용할려고 할 땐

GPSView() 호출 하면 바로 사용이 가능하다.