重新定位MKMapView的userLocationView?

时间:2012-07-17 21:52:50

标签: objective-c ios mapkit

我正在制作一个在森林中有一系列路径的应用。 GPS现在将要关闭几十米,所以我正在尝试编写一些代码,将userLocationView“捕捉”到跟踪(用户可能在哪里)。

我有一些代码可以扫描附近的路径,确定用户的可能位置,然后获取CLLocationCoordinate2D。

现在我需要将该位置应用于userLocationView。我认为这会起作用,但似乎不是:

userLocationAnnotation.coordinate = myDerivedCoordinate;

我意识到我可能会创建自己的注释,但如果可能的话我想避免这种情况。

1 个答案:

答案 0 :(得分:1)

MapView直接从CLLocationManager获取用户位置,并且没有记录的方法来拦截此交互。这样做比添加自己的注释更有用,也是应用拒绝的原因。此外,重新定义系统提供的正确信息是没有意义的。这就是mapView.userLocation是具有只读位置属性的MKUserLocation的原因。

所以你必须创建自己的,粗略的:

  • 设置mapView.showsUserLocation = false;
  • 创建并启动位置管理器

    self.locationManager = [CLLocationManager new]; self.locationManager.delegate = self; [self.locationManager startUpdatingLocation];

  • locationManager:didUpdateToLocation:fromLocation:的{​​{1}}添加/替换您自己的蓝点注释。

您可以使用UIKit-Artwork-Extractor获取蓝点图形(可能还有脉动圆圈)。对于脉动效果,使用不同的帧添加到CLLocationManagerDelegate MKAnnotationView,或者使用一个圆圈并使用UIImageView UIView animateWithDuration作为CGAffineTransformMakeScale属性。