9
votes

Réglage mkusertrackingmodeSuiviwithheading

J'ai essayé de définir le mode de suivi de l'utilisateur dans la méthode ViewDidLoad (et dans la viewwillappappear). Si je l'ai défini sur MKUSERTrackingModeVoyant (valeur de 2), il ne prend pas effet. En fait, juste après avoir défini sa valeur à 2, si je imprime la valeur, il est 1, pourquoi? Je n'ai jamais vu une telle chose dans une expérience de programmation!

Voici comment je l'ai défini: xxx

si je fais la même chose dans la méthode de la viewwillappear, l'effet est le même. Cependant, la deuxième fois que cette vue est affichée, le réglage prendra effet. (J'ai une visualisation d'ongletsController, je commois la vue sur une autre puis retournez).

La manière dont je vois que cela ne prend pas effet est deux mesures: (1) Imprimer sa valeur juste après la définition ( 2) Dans la vue Carte, l'en-tête n'est pas affiché.

Qu'est-ce qui se passe?


0 commentaires

5 Réponses :


3
votes

J'ai aussi le même problème. Impossible de trouver des informations sur la carte en-tête de la carte de ne pas fonctionner ou de travailler dans ce domaine.

La solution que j'ai implémentée consiste à utiliser un cllouerManager personnalisé pour extraire l'en-tête, puis faire pivoter la carte de manière appropriée. Consultez cette réponse pour une aide d'aide à l'aide de cette méthode: Rotate MapView à l'aide de l'orientation de Compass

Notez également que le simulateur IOS ne permet pas actuellement de la simulation de la rubrique.


3 commentaires

Fait intéressant, la carteView: DIDUPDATEUSERLOCATION: La méthode dans la classe de déléguée MKAPView n'est jamais appelée une seule fois, même si je vois l'emplacement actuel (le point bleu) lorsque la carte est chargée. Je me suis assuré que la propriété "InfreindUserLocation" est définie sur Oui.


Après avoir défini le délégué de MapView (AS SOFT), la carteView: DidupDateSuserLocation est maintenant appelée. Mais lorsque je touche ou zoomez sur l'écran, l'emplacement de l'emplacement disparaît et la carte tourne à un état régulier.


@ user1020156 Je pense que c'est un comportement normal de faire tourner la carte à la normale lorsque vous panoramique sur la carte (bien que le zoom ne provoque pas la carte de retourner à la normale pour moi). Ceci est le comportement que les "cartes" par défaut sont des expositions sur IOS. De plus, vous pouvez trouver chaque fois que le mode de suivi a été modifié via MapView: DidChangeAserTrackingMode: animé sur le délégué MapView développeur.apple.com/library/ios/#documentation/mapkit/refere nce / ...



0
votes

Pourrait-il être que cela soit appelé trop tôt? Essayez de mettre l'appel SetUserSerTrackingMode dans la méthode ViewDidAppear et assurez-vous que vous n'avez pas défini de valeur différente dans Builder d'interface (la partie GUI de Xcode)


0 commentaires

0
votes

J'avais aussi ce problème. Même si j'avais déjà défini ci-dessous présentant une présence sur YES et UserTrackingMode à MKUSERTrackingModeDheadingwithheading dans -ViewDidLoad, l'en-tête n'était toujours affichée que de temps en temps. Une fois la vérification «Affiche l'emplacement de l'utilisateur» dans la nibieuse pour une bonne mesure, ainsi que le déplacement du déplacement de SetUserTrackingMode: To -ViewDidAppappe, il a commencé à indiquer systématiquement l'en-tête. Je dirais que -ViewDidLoadLoad est appelé trop tôt pour la carteView. Je ne sais pas pourquoi, cependant.


0 commentaires

15
votes

Je sais que c'est un post vraiment ancien, mais juste au cas où cela aide les autres là-bas à la recherche d'une solution, la raison en est que vous devez définir la maîtrise de l'utilisateur après la charge de la carte. Donc, définissez votre classe comme délégué, puis ajoutez cette méthode de déléguée:

- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView {
    mapView.userTrackingMode = MKUserTrackingModeFollowWithHeading;
}


1 commentaires

N'oubliez pas: si les carreaux sont mis en cache, cette méthode n'est jamais appelée.



0
votes

Alors la raison pour laquelle cette erreur se produit: xxx pré>

mettre le code dans la méthode mapviedfindfinishloadingMap n'est également pas une bonne idée car il n'est pas dit que la méthode sera appelée. La méthode n'est pas appelée lorsque les carreaux sont mis en cache (par exemple, si vous avez un autre MAPView dans votre application sur un endroit différent sur un endroit différent sur les mêmes tuiles). P>

Ce n'est donc pas une bonne idée de la mettre dans la carte MapViefDidDinishOffice Soit. p>

solution finale: p>

Créez un booléen privé et définissez-le sur false dans la vue ViewDidLoad P>

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    if(!_didFollowUserAlready)
    {
        _didFollowUserAlready = TRUE;
        [mapView setUserTrackingMode:MKUserTrackingModeFollow animated:TRUE];
    }
}


0 commentaires