【发布时间】:2020-12-31 01:44:11
【问题描述】:
试图让地图以当前位置为中心。它一遍又一遍地显示“更新的位置”,然后它不会将地图更改为当前位置。如果您滚动到当前位置,它会显示蓝点。
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")
}
}
【问题讨论】:
-
CLLocationManager和地图视图是两种不同的动物。 -
我编辑了代码以摆脱 CLLocationManager(因为它不是必需的)。使用上面的代码,它仍然做同样的事情。它会在我当前的位置放置一个蓝点,但地图不会自动转到那个点,它会显示在该地区设置的纬度/经度。如何让它自动显示当前位置? (info.plist 有正确的条目)
-
哎呀!?不使用
CLLocationManager,如何获取当前位置? -
那么如何让 CLLocationManager 与 Map 一起工作?这就是你所说的“两种不同的动物”的原始问题
-
最初,您并没有在两者之间建立任何联系。您应该使用状态值将数据从一个传递到另一个。