我有一个MKMapView
应该使用自定义视图(而不是蓝点)来跟踪用户的位置。为了用这个视图代替蓝点,我这样返回它:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
if (annotation == [mapView userLocation])
{
return userLocationView;
}
}
要初始化跟踪,我调用
[mapView setShowsUserLocation: YES];
[mapView setUserTrackingMode: MKUserTrackingModeFollow animated: NO];
[mapView setDelegate: self];
正如所料,-mapView:didUpdateUserLocation:
在应用加载时被调用一次。-mapView:viewForAnnotation:
不幸的是,除非我更改为具有以下实现,否则它再也不会被调用:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
if (annotation == [mapView userLocation])
{
return nil;
}
}
通过这些更改,地图会加载蓝点作为用户位置的指示符,并-mapView:didUpdateUserLocation:
像预期的那样频繁调用。
是否有某种互斥性来跟踪用户的位置并拥有自定义的用户位置视图?我怎样才能使两者都发生?
来源
这个项目演示了这个问题。https://dl.dropbox.com/u/2338382/MapKitFuckery.zip
漏洞
这很可能是一个错误,我已将其归档为雷达。在此期间,接受的答案应该证明是足够的。然而,值得注意的是,我不得不完全放弃[mapView userLocation]
and [mapView showsUserLocation]
,转而支持简单的自定义注释和CLLocationManager
.