MKMapView:如何将MKUserLocationView(蓝点)带到前面?

时间:2010-12-03 22:59:54

标签: ios iphone mkmapview mapkit core-location

我正在添加自定义注释而不是引脚注释。 基本上,我在这些注释中绘制一个圆并将它们添加到地图中。 这些自定义注释会遮挡用户位置视图(蓝点)的问题 如何将蓝点带到前面。

   
- (void)mapView:(MKMapView *)mapView 
didUpdateUserLocation:(MKUserLocation *)userLocation 
{
UIView *user = [mapView viewForAnnotation:userLocation];
[mapView bringSubviewToFront:user];
}

然而,这对我不起作用。我的自定义注释仍然覆盖了蓝色用户点。 任何想法如何让用户位置视图出现在前面? 干杯

4 个答案:

答案 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
祝你好运!