【问题标题】:MKMapView: how to bring MKUserLocationView (The blue dot) to front?MKMapView:如何将 MKUserLocationView(蓝点)放在前面?
【发布时间】:2011-05-20 00:54:10
【问题描述】:

我正在添加自定义注释而不是引脚注释。 基本上,我在这些注释中画了一个圆圈并将它们添加到地图中。 问题是这些自定义注释模糊了用户位置视图(蓝点) 如何将蓝点放在前面。

- (void)mapView:(MKMapView *)mapView
didUpdateUserLocation:(MKUserLocation *)userLocation
{
UIView *user = [mapView viewForAnnotation:userLocation];
[mapView带来SubviewToFront:用户];
}

但是,这对我不起作用。蓝色的用户点仍然被我的自定义注释覆盖。 有什么想法可以让用户位置视图出现在前面吗? 干杯

【问题讨论】:

    标签: ios iphone mkmapview mapkit core-location


    【解决方案1】:

    试试这个,它有效。:

    MKAnnotationView *userLocationView = [self.mapView viewForAnnotation:self.mapView.userLocation];
    [userLocationView.superview bringSubviewToFront:userLocationView];
    

    【讨论】:

      【解决方案2】:

      我是这样完成的:

      - (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];
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        通常您希望将 userLocation 视图放在后面。至少这是带有 pin 的 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;
                }
            }
        }
        

        【讨论】:

          【解决方案4】:

          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, 保留) MKAnnotationView *userLocationAnnotationView;

          当您运行此代码时,必须已添加当前位置视图。由于多种原因,viewDidLoad 中可能不是这种情况,包括:a) 还没有 GPS 更新 b) 当前位置不在屏幕上。我正在运行此代码:

          - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading

          祝你好运!

          【讨论】:

            猜你喜欢
            • 2012-09-16
            • 2013-11-13
            • 2014-08-29
            • 2017-08-23
            • 2013-10-09
            • 2022-01-14
            • 1970-01-01
            • 2011-12-05
            • 1970-01-01
            相关资源
            最近更新 更多