Fix location report parsing and center map on user location immediately.

Decode numeric staff_id from the report API and auto-center the map when the first user location update arrives.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-07 12:01:46 +08:00
parent cfcd3eee6f
commit 9899a2ccb3
4 changed files with 80 additions and 3 deletions

View File

@ -294,6 +294,7 @@ final class LocationReportMapView: UIView, MAMapViewDelegate {
let mapView: MAMapView
private var markerAnnotation: MAPointAnnotation?
private var shouldCenterOnNextUserLocation = false
override init(frame: CGRect) {
_ = AMapBootstrap.configureIfNeeded()
@ -314,9 +315,14 @@ final class LocationReportMapView: UIView, MAMapViewDelegate {
fatalError("init(coder:) has not been implemented")
}
/// 便
func enableInitialUserLocationCentering() {
shouldCenterOnNextUserLocation = true
centerOnUserLocationIfNeeded()
}
func centerOnUserLocation() {
let coordinate = mapView.userLocation.location?.coordinate
guard let coordinate, CLLocationCoordinate2DIsValid(coordinate) else { return }
guard let coordinate = validUserCoordinate else { return }
setCenter(coordinate)
}
@ -345,7 +351,25 @@ final class LocationReportMapView: UIView, MAMapViewDelegate {
mapView.addAnnotation(annotation)
}
func mapView(_ mapView: MAMapView!, didUpdate userLocation: MAUserLocation!, updatingLocation: Bool) {
guard updatingLocation else { return }
centerOnUserLocationIfNeeded()
}
func mapView(_ mapView: MAMapView!, didSingleTappedAt coordinate: CLLocationCoordinate2D) {
onMapTap?(coordinate)
}
private var validUserCoordinate: CLLocationCoordinate2D? {
let coordinate = mapView.userLocation.location?.coordinate
guard let coordinate, CLLocationCoordinate2DIsValid(coordinate) else { return nil }
guard coordinate.latitude != 0 || coordinate.longitude != 0 else { return nil }
return coordinate
}
private func centerOnUserLocationIfNeeded() {
guard shouldCenterOnNextUserLocation, let coordinate = validUserCoordinate else { return }
setCenter(coordinate, animated: false)
shouldCenterOnNextUserLocation = false
}
}