Désactiver la boussole de la MKMapView
Je suis l'aide d'une MapView dans mon application pour en afficher quelques annotations. Dans iOS 7, une boussole apparaît de façon aléatoire sur la carte. Je ne peux pas reproduire l'erreur, car il apparaît de façon aléatoire, mais je veux le désactiver.
Toutes les idées comment le désactiver?
Mise à jour: j'ai trouvé est apparaît pas au hasard, mais sur un geste. Lorsque vous utilisez 2 doigts et glisse de l'un à droite et l'autre à gauche.
Ce geste est également connu comme "tourner"
OriginalL'auteur BlackM | 2013-10-05
Vous devez vous connecter pour publier un commentaire.
Vous pouvez désactiver la boussole facilement sur OSX 10.9 /iOS 9 et plus tard avec la
showsCompass
propriété:Sur iOS 8 ou version antérieure, vos choix sont:
Le sucer et de vivre avec elle.
Utiliser un hack, comme:
la position de la carte masquer la boussole à l'écran (crédit revient à Alex Wien), ou
à pied le point de vue de la hiérarchie de la carte pour trouver le point de vue représente la boussole et l'enlever (crédit va à David Topolansky).
Si vous n'êtes pas la rotation de la carte par programmation et il n'a pas déjà été tourné, désactiver la rotation entièrement, à l'aide de
La boussole ne s'affiche que lorsque la carte est tournée, donc en faisant cela, vous vous assurez que la boussole n'est jamais déclenché.
Il n'est pas clair pour moi pourquoi Apple a attendu si longtemps pour permettre de cacher la boussole sur iOS, et aucune des options ci-dessus sont l'idéal. Choisissez celui que vous pensez est le moins mauvais dans votre cas.
OriginalL'auteur Mark Amery
J'ai trouvé une solution à votre problème, en utilisant la Marque Amery idée de la traversée de la
MKMapView
exemple des sous-vues pour trouver la boussole, ainsi que l'utilisation de la reconnaissance gestuelle pour déclencher l'événement de suppression.Pour trouver la boussole que j'ai imprimé la description des points de vue et a constaté que l'un des points de vue est une instance de
MKCompassView
, ce n'était évidemment la boussole.J'ai le code suivant qui devrait fonctionner pour vous. Il vérifie un geste de rotation, puis supprime le point de vue de la méthode, déclenchée par le geste de l'événement.
J'ai testé cette méthode et ça fonctionne bien pour moi:
Nice - je suis surpris qu'il s'avère que ce hack est très simple à mettre en œuvre et à comprendre. Je n'ai pas accès à un Mac aujourd'hui, donc je ne suis pas en mesure de tester cela, mais va prendre ta parole pour que cela fonctionne. J'ai édité un lien vers votre réponse dans la mienne.
Ne fonctionne pas pour moi (iOS 8.1.2).. 🙁
Le mouvement de rotation ne fonctionne pas pour moi, mais j'ai mis en place - (void)viewDidLayoutSubviews méthode de mon point de vue, contrôleur et déplacé le code, maintenant ça fonctionne.
OriginalL'auteur David Topolansky
Créer un wrapper
UIView
avec l'image que vous souhaitez pour votre carte etclipsToBounds
ensemble deYES
(ou de manière équivalente, Clip des sous-vues ensemble dans Interface Builder). Ensuite, mettre votreMKMapView
à l'intérieur qu'wrapper de vue, avec les y coordonner de la carte de l'image d'ensemble, par exemple,-80
, et la hauteur de la carte définie de telle sorte que son centre vertical est aligné avec son parent.Puis la boussole sera affiché, mais vous ne pouvez pas le voir, parce qu'il est au-dessus du haut de sa vue parent - problème résolu.
OriginalL'auteur AlexWien
Voici la solution pour Swift 4:
OriginalL'auteur mirap
Ici code swift:
OriginalL'auteur Michał Jurczuk
Vous pouvez masquer la boussole sur MKMapView lors de la rotation de la carte en ajoutant en dessous de la ligne dans la méthode viewDidLoad dans tous les iOS:
OriginalL'auteur sajgan2015
Que je comprends ce que vous voulez est d'interdire montrant l'utilisateur de l'emplacement actuel.
Vous devez utiliser @property(nonatomic) BOOL showsUserLocation.
Docs sur ce
Supposer que les @property(nonatomic) MKUserTrackingMode userTrackingMode
ne pouvez pas activer ou désactiver le suivi, c'est juste le mode change de la entre les pas suivants, suivants et suivantes, avec rotation.
J'ai trouvé est apparaît pas au hasard, mais sur un geste. Lorsque vous utilisez 2 doigts et les lames une à droite et l'autre à gauche.
Eh bien, maintenant, je comprends ce que vous voulez. La seule façon docs montrer à nous pour désactiver la carte en rotation à l'aide de rotateEnabled. Cela permettra d'éviter un Geste de rotation d'être activé.
Et si vous avez besoin de faire pivoter votre carte, vous pouvez ajouter UIRotationGestureRecognizer à la carte est vue ajouter de la faire pivoter de manière que vous voulez à l'aide de [mapView setTransform:CGAffineTransformMakeRotation(rotation)]; annotations de trop.
Ce qui est si difficile à comprendre? Il est préférable de désactiver la boussole quand il veut, et de garder la fonction de rotation.
OriginalL'auteur Vladislav Mazur