-
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))
}
}
시뮬레이터 동작 'SwiftUI 100 레시피 > Maps' 카테고리의 다른 글
SwiftUI Maps 68 - 맵 타입 변경하기(일반,위성,하이브리드) (0) 2022.06.28 SwiftUI Maps 66 - 커스텀 주석(Annotations) 만들기 (0) 2022.06.28 SwiftUI Maps 65 - 지도에 주석(Annotations) 달기 (0) 2022.06.27 SwiftUI Maps 64 - 지도 표시하기 (0) 2022.06.27