2010-08-23 18 views
1

J'ai donc créé un CLLocationManager, appelé pour commencer la mise à jour, défini mapES.showsUserLocation sur YES et renvoyé nil pour l'annotation userLocation. Voici quelques extraits de mon code dans mon UIMapViewController:showsUserLocation n'affiche pas de point bleu dans l'iPhone 4.0

- (void)viewDidLoad 
{ 
    CLLocationManager *locationManager = [[CLLocationManager alloc] init]; 
    [locationManager startUpdatingLocation]; 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
CLLocationCoordinate2D userCoordinate = locationManager.location.coordinate; 
[map setCenterCoordinate:userCoordinate animated:YES]; 
[map setShowsUserLocation:YES]; 
} 

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 

MKAnnotationView *mapIconView = (MKAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:@"mapIconView"]; 

// Don't mess with the user location annotation 
    if (annotation == mapView.userLocation) 
       return nil; 

    // etc. 
}  

Tout cela semble assez simple. Tout fonctionne bien - la carte effectue un zoom sur mon emplacement comme il se doit, et j'ai confirmé que toutes les méthodes sont appelées comme prévu - mais pas de point bleu. Impossible d'obtenir le point bleu pour la vie de moi, peu importe où ou combien de fois je dis

mapView.setUserLocation = YES; 

Qu'est-ce que je manque ici?

Répondre

1

Quand je fais cela, plutôt que de vérifier annotation comme vous, je fais quelque chose le long des lignes de:

if([annotation class] == MKUserLocation.class) { 
    return nil; 
} 
+0

Merci, mais cela ne semble rien changer. Toujours pas de point. Je peux parcourir le code et regarder le {return nil; } appelé, donc je ne pense pas que le problème est là. – Aeonaut

+0

C'est un très bon point. Le paramètre userLocation de la vue carte est initialement nul, il est donc préférable de vérifier la classe de l'annotation au lieu de la comparer à mapView.userLocation. – spstanley

1

Il est mapView.showUserLocation = OUI;

Vous semblez avoir utilisé la mauvaise instruction 'set' au lieu de 'show'.

Et pour info, vous n'avez pas à jouer avec le gestionnaire de localisation juste pour obtenir l'emplacement de l'utilisateur. Corelocation est automatiquement renvoyé lorsque vous définissez mapview.showUserLoction = YES et que vous chargez la carte.

Hope it helps :)

+4

Il utilise la méthode setter de la propriété pour définir la valeur, ce qui est parfaitement valide. Il fait exactement ce que "mapView.showUserLocation = YES;" fait, grâce à Obj-C 2.0! – spstanley

0

Si vous utilisez le simulateur iOS, vous ne pouvez pas voir le point bleu. J'ai eu exactement le même problème et quand j'ai commencé à essayer mon logiciel avec le vrai matériel, le point bleu est apparu!

+0

En effet, dans le simulateur, l'emplacement de l'utilisateur de la vue cartographique est toujours défini sur N 19º 19.901, W 122º 01.827, quel que soit votre emplacement "réel" (déterminé par votre adresse Internet, btw). – spstanley

+0

Oui, je sais. Je voulais juste dire que s'il teste dans le simulateur, il ne peut pas voir l'emplacement actuel avec un point bleu. Tout est clair? – Krismutt

1

J'ai eu le même problème où le point bleu n'apparaîtrait pas. Il s'avère qu'il apparaissait, mais pas là où je pensais que c'était.

De même que pour mon problème, votre code ressemble à la fois aux mises à jour de l'emplacement de traitement et à la demande à MKMapView de suivre l'emplacement de l'utilisateur. Notez que dans le simulateur, ce sont deux endroits différents! Lorsque le MKMapView suit l'emplacement de l'utilisateur dans le simulateur, il vous donne l'emplacement d'Apple à Cupertino, CA, quel que soit votre emplacement "réel".

En utilisant ce code et de laisser la piste MKMapView l'emplacement de votre délégué au lieu de suivre l'emplacement vous-même peut révéler le point bleu:

- (void)mapView:(MKMapView *)theMapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
    [theMapView setCenterCoordinate:userLocation.location.coordinate animated:YES]; 
} 

Vous aurez probablement envie de zoomer un peu. J'ai utilisé le code pratique de cette entrée de blog pour le faire: Set the Zoom Level of an MKMapView

+0

a raison: dans le simulateur Core Location utilise votre position actuelle (basée sur votre adresse IP et autres), mais MapKit utilise Cupertino, CA, comme votre emplacement actuel. Si vous dessinez une carte centrée sur l'emplacement de votre Core Location, vous ne verrez pas le point bleu sauf si vous effectuez un zoom arrière pour voir la Californie du Nord. Il fonctionnera bien sur un appareil, cependant. –

1

Assurez-vous que vous ne supprimez pas toutes les annotations de la carte n'importe où:

par exemple [mapView removeAnnotations: mapView.annotations]