如何解决MapKit 使用 SwiftUI 2 显示当前位置不使用 UIRepresentable
试图让地图以当前位置为中心。它一遍又一遍地显示“更新位置”,然后它不会更改当前位置的地图。如果您滚动到当前位置,它会显示蓝点。
struct Home:View {
@State var region = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 13.086,longitude: 80.2769),latitudinalMeters: 10000,longitudinalMeters: 10000)
@State var trackingMode: MapUserTrackingMode = .follow
@State var manager = CLLocationManager()
@StateObject var managerDelegate = LocationDelegate()
var body:some View {
vstack {
Map(coordinateRegion: $region,interactionModes: .all,showsUserLocation: true,userTrackingMode: $trackingMode)
}
.onAppear {
manager.delegate = managerDelegate
}
}
}
class LocationDelegate: NSObject,ObservableObject,CLLocationManagerDelegate {
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
if manager.authorizationStatus == .authorizedWhenInUse {
print("Authorized...")
manager.startUpdatingLocation()
} else {
print("Not Authorized...")
manager.requestWhenInUseAuthorization()
}
}
func locationManager(_ manager: CLLocationManager,didUpdateLocations locations: [CLLocation]) {
print("Updated Location")
}
}
解决方法
这似乎就是答案。
struct Home:View {
@State var trackingMode: MapUserTrackingMode = .follow
@State var manager = CLLocationManager()
@StateObject var managerDelegate = LocationDelegate()
var body:some View {
VStack {
Map(coordinateRegion: $managerDelegate.region,interactionModes: .all,showsUserLocation: true,userTrackingMode: $trackingMode)
}
.onAppear {
manager.delegate = managerDelegate
}
}
}
class LocationDelegate: NSObject,ObservableObject,CLLocationManagerDelegate {
@Published var region = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 13.086,longitude: 80.2769),latitudinalMeters: 10000,longitudinalMeters: 10000)
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
if manager.authorizationStatus == .authorizedWhenInUse {
print("Authorized...")
manager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
manager.startUpdatingLocation()
} else {
print("Not Authorized...")
manager.requestWhenInUseAuthorization()
}
}
func locationManager(_ manager: CLLocationManager,didUpdateLocations locations: [CLLocation]) {
print("Updated Location")
region.center.latitude = (manager.location?.coordinate.latitude)!
region.center.longitude = (manager.location?.coordinate.longitude)!
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。