2010-12-03 32 views
2

我正在添加一個自定義註釋而不是針腳註釋。 基本上,我在這些註釋中畫一個圓圈並將它們添加到地圖中。 問題這些自定義註釋掩蓋了用戶位置視圖(藍點) 如何將藍點帶到前面。MKMapView:如何將MKUserLocationView(藍點)放在前面?

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

但是,這不適用於我。藍色的用戶點仍在覆蓋我的自定義註釋。 任何想法如何讓用戶位置視圖出現在前面? 乾杯

回答

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; 
     } 
    } 
} 
0

奧爾特溫的回答並沒有爲我工作。 MKUserLocationView從不在該數組中(至少在我的測試中)。

而是直接從MKMapView實例中獲取值。像這樣:

 

if (self.userLocationAnnotationView != nil && self.mapView.userLocation != nil) { 
    self.userLocationAnnotationView = [self.mapView viewForAnnotation:self.mapView.userLocation]; 
} 
 

「userLocationAnnotationView」是伊娃我在我的視圖控制器:

 
MKAnnotationView *userLocationAnnotationView; 
@property (nonatomic, retain) MKAnnotationView *userLocationAnnotationView; 

當你運行該代碼,必須已經加入當前位置視圖。 viewDidLoad可能並非如此,原因很多,包括:a)沒有GPS更新,但b)當前位置不在屏幕上。我正在運行此代碼:

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

祝你好運!

5

試試這個,它的工作原理:

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]; 
     } 
    } 
} 
相關問題