ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SwiftUI Maps 67 - 사용자 위치 표시하기
    SwiftUI 100 레시피/Maps 2022. 6. 28. 12:32

    #1. Info.plist 에서 권한 추가 (Privacy-Location When In Use Usage Description)

    #2. ContentView

    import SwiftUI

    import MapKit

     

     

    struct ContentView: View {

        

        @StateObject private var locationManager = LocationManager()

        

        var newRegion: Binding<MKCoordinateRegion>?{

            guard let location = locationManager.location else {

                return MKCoordinateRegion.defaultRegion().asBindable()

            }

            let region = MKCoordinateRegion(center: location.coordinate, latitudinalMeters: 500, longitudinalMeters: 500)

            

            return region.asBindable()

        }

        

        var body: some View {

            if let region = newRegion{

                Map(coordinateRegion: region, interactionModes: .all, showsUserLocation: true)

            }

        }

    }

     

    struct ContentView_Previews: PreviewProvider {

        static var previews: some View {

            ContentView()

        }

    }

     

    #3. LocationManager.swfit

     

    import Foundation

    import CoreLocation

     

    class LocationManager: NSObject, ObservableObject{

        

        private let locationManager = CLLocationManager()

        @Published var location: CLLocation?

        private var locationFound: Bool = false

        

        override init(){

            super.init()

            

            locationManager.desiredAccuracy = kCLLocationAccuracyBest

            locationManager.distanceFilter = kCLDistanceFilterNone

            locationManager.requestWhenInUseAuthorization()

            locationManager.startUpdatingLocation()

            locationManager.delegate = self

        }

    }

     

    extension LocationManager: CLLocationManagerDelegate{

        func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

            if !locationFound{

                guard let location = locations.last else {return}

                locationFound = true

                DispatchQueue.main.async {

                    self.location = location

                }

            }

                

             

        }

    }

     

    #4. MKCoordinateRegion+Extentions.swift

    import Foundation

    import MapKit

    import SwiftUI

     

    extension MKCoordinateRegion{

        

        static func defaultRegion() -> MKCoordinateRegion{

            return MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 37.5666805, longitude: 126.9784147), latitudinalMeters: 500, longitudinalMeters: 500)

        }

        

        func asBindable() -> Binding<MKCoordinateRegion>?{

            return Binding<MKCoordinateRegion>(.constant(self))

        }

    }

     

    시뮬레이터 동작

     

    댓글

Designed by Tistory.