我正在制作一个在森林中有一系列小径的应用程序。 GPS 会时不时地偏离几十米,因此我尝试编写一些代码,将 userLocationView“捕捉”到路径(用户可能所在的位置)。
我有一些代码可以扫描附近的踪迹,确定用户的可能位置,并获取它的 CLLocationCooperative2D。
现在我需要将该位置应用到 userLocationView。我以为这会起作用,但似乎不起作用:
userLocationAnnotation.coordinate = myDerivedCoordinate;
我意识到我可能可以创建自己的注释,但如果可能的话我想避免这种情况。
最佳答案
MapView
直接从 CLLocationManager
获取用户位置,并且没有记录的方法来拦截此交互。这样做比添加自己的注释需要更多工作,并且会导致应用程序拒绝。而且,重新定义系统提供的正确信息是没有意义的。这就是为什么 mapView.userLocation
是一个具有只读位置属性的 MKUserLocation
。
所以你必须创建自己的,大致:
- 设置
mapView.showsUserLocation = false;
创建并启动位置管理器
self.locationManager = [CLLocationManager 新]; self.locationManager.delegate = self; [self.locationManager startUpdatingLocation];
从
CLLocationManagerDelegate
的locationManager:didUpdateToLocation:fromLocation:
添加/替换您自己的蓝点注释。
您可以使用 UIKit-Artwork-Extractor 获取蓝点图形(可能还有脉动的圆圈)。对于脉动效果,向 MKAnnotationView
添加一个具有不同帧的 UIImageView
,或者取一个圆圈并使用 UIView animateWithDuration
和 CGAffineTransformMakeScale
用于 view.transform
属性。
关于objective-c - 重新定位 MKMapView 的 userLocationView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11531408/