2010-12-03 11 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ではありませんか?)私はこのようなあなたのMKMapViewDelegate-mapView:didAddAnnotationViews:を追加します。

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views { 
    for (id view in views) { 
     if (![view isKindOfClass:[YourCustomAnnotationView class]]) { 
      self.userLocationView = view; 
     } 
    } 
} 
0

Ortwinの答えは私のために動作しませんでした。 MKUserLocationViewは、少なくとも私のテストではその配列にはありません。

代わりに、MKMapViewインスタンスから直接値を取得します。これと同じように:あなたはこのコードを実行すると、現在の場所のビューがすでに

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

を追加している必要があります

 

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

「userLocationAnnotationView」私は私のビューコントローラを持っているIVARあります。これは、次のようなさまざまな理由で、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]; 
     } 
    } 
} 
関連する問題