2010-12-03 24 views
2

J'ajoute une annotation personnalisée à la place de l'annotation de broche. Fondamentalement, je dessine un cercle dans ces annotations et les ajoute à la carte. Le problème que ces annotations personnalisées masquent la vue de l'emplacement de l'utilisateur (le point bleu) Comment amener le point bleu vers l'avant.MKMapView: comment amener MKUserLocationView (le point bleu) devant?

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

Cependant, cela ne fonctionne pas pour moi. Le point utilisateur bleu est toujours couvert par mes annotations personnalisées. Des idées comment je peux obtenir l'affichage de l'emplacement de l'utilisateur pour apparaître en face? Cheers

Répondre

0

Normalement, vous voudriez avoir la vue userLocation à l'arrière. Au moins, c'est le comportement normal pour un mapView avec des broches.

Si vous voulez vraiment l'amener au premier plan, vous devez trouver la vraie vue userLocation. Je crois que [mapView viewForAnnotation:userLocation] ne vous donne pas l'affichage userLocation réel (avez-vous vérifié ce n'est pas nil?). Je voudrais ajouter un -mapView:didAddAnnotationViews: à votre MKMapViewDelegate comme ceci:

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

réponse de Ortwin ne fonctionne pas pour moi. Le MKUserLocationView n'est jamais dans ce tableau (au moins dans mes tests). Au lieu de cela, obtenez directement la valeur de l'instance MKMapView. Comme si:

 

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

« userLocationAnnotationView » est un Ivar j'ai dans mon contrôleur de vue:

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

Lorsque vous exécutez ce code, l'affichage de l'emplacement actuel doit avoir été ajouté. Cela peut ne pas être le cas dans viewDidLoad pour diverses raisons, notamment: a) pas de mise à jour GPS pour l'instant b) l'emplacement actuel est désactivé. Je cours ce code dans:

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

Bonne chance!

5

Essayez ceci, cela fonctionne .:

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

J'accompli comme ceci:

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