我正在添加自定义注释而不是引脚注释。 基本上,我在这些注释中绘制一个圆并将它们添加到地图中。 这些自定义注释会遮挡用户位置视图(蓝点)的问题 如何将蓝点带到前面。
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation { UIView *user = [mapView viewForAnnotation:userLocation]; [mapView bringSubviewToFront:user]; }
然而,这对我不起作用。我的自定义注释仍然覆盖了蓝色用户点。 任何想法如何让用户位置视图出现在前面? 干杯
答案 0 :(得分:6)
试试这个,它有效。:
MKAnnotationView *userLocationView = [self.mapView viewForAnnotation:self.mapView.userLocation]; [userLocationView.superview bringSubviewToFront:userLocationView];
答案 1 :(得分:3)
我完成了这样的事情:
- (void) mapView:(MKMapView *)aMapView didAddAnnotationViews:(NSArray *)views {
for (MKAnnotationView *view in views) {
if ([[view annotation] isKindOfClass:[MKUserLocation class]]) {
[[view superview] bringSubviewToFront:view];
} else {
[[view superview] sendSubviewToBack:view];
}
}
}
答案 2 :(得分:0)
通常,您希望在后面有userLocation视图。至少这是带引脚的mapView的正常行为。
如果你真的想把它带到前面,你必须找出真正的userLocation视图。我相信[mapView viewForAnnotation:userLocation]
没有给你真正的userLocation视图(你检查过它不是nil
吗?)。我会像-mapView:didAddAnnotationViews:
这样添加MKMapViewDelegate
:
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
for (id view in views) {
if (![view isKindOfClass:[YourCustomAnnotationView class]]) {
self.userLocationView = view;
}
}
}
答案 3 :(得分:0)
Ortwin的回答对我不起作用。 MKUserLocationView永远不会出现在那个数组中(至少在我的测试中)。
相反,直接从MKMapView实例获取值。像这样:
if (self.userLocationAnnotationView != nil && self.mapView.userLocation != nil) {
self.userLocationAnnotationView = [self.mapView viewForAnnotation:self.mapView.userLocation];
}
“userLocationAnnotationView”是我在视图控制器中的ivar:
MKAnnotationView *userLocationAnnotationView; @property (nonatomic, retain) MKAnnotationView *userLocationAnnotationView;
运行此代码时,必须已添加当前位置视图。由于各种原因,在viewDidLoad中可能不是这种情况,包括:a)还没有GPS更新b)当前位置在屏幕外。我正在运行此代码:
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading祝你好运!