J'essaie d'utiliser Compass dans mon application iOS. Et j'ai un problème avec ça. Si je mettez en place
EmplacementManagersHouldDisplayHheadCalibrationCalibration Code> Méthode et
Retour Oui CODE>, puis l'affichage de calibrage montre toujours. Mais je devrais le faire comme des cartes Apple. C'est à dire. L'affichage d'étalonnage doit être présenté parfois. Lorsque la boussole doit être étalonnée. P>
5 Réponses :
J'utilise le code suivant:
@property (nonatomic, retain) CLHeading * currentHeading; // Value updated by @selector(locationManager:didUpdateHeading:) ... ... - (BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager *)manager{ if( !self.currentHeading ) return YES; // Got nothing, We can assume we got to calibrate. else if( self.currentHeading.headingAccuracy < 0 ) return YES; // 0 means invalid heading. we probably need to calibrate else if( self.currentHeading.headingAccuracy > 5 )return YES; // 5 degrees is a small value correct for my needs. Tweak yours according to your needs. else return NO; // All is good. Compass is precise enough. }
OK, je ne pouvais pas laisser de commentaire, donc je pensais que je devrais laisser une réponse alors que la réponse de Claude Houle était utile pour moi.
J'utilise cette version améliorée de Claude Houle's Réponse . P>
- (BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager *)manager{ if(!manager.heading) return YES; // Got nothing, We can assume we got to calibrate. else if(manager.heading.headingAccuracy < 0 ) return YES; // 0 means invalid heading, need to calibrate else if(manager.heading.headingAccuracy > 5 ) return YES; // 5 degrees is a small value correct for my needs, too. else return NO; // All is good. Compass is precise enough. }
Merci pour ça. Il suffit de vérifier mon code et oui, il y avait cette erreur, a mis à jour la réponse. Votre réponse est plus concise (sachant que NULL est 0). Pour un débutant comme moi à l'époque, peut aider à expliquer ces quelques chèques.
Avez-vous déjà vu CaidingCuracy CODE> pour être inférieur à 5 lorsque
EmplacementManagersHouldDisplayHheadCalibration code> a été appelé? Je suppose que votre réponse est non, car 5 degrés seraient trop proches de la précision IOS peuvent garantir (sur certains appareils au moins). Je pense que Wim Verhoef a un point valide.
Manager.Heading est clip. C'est pourquoi gestionnaire.Heading> 5 donnera un avertissement. Self.currentheading.HeadCacidation> 5 est le vrai. p>
une solution beaucoup plus simple:
Ceci tire parti du fait que les sélecteurs effectués sur nil Les objets retournent toujours zéro et le fait que la précision ne soit jamais valide et égale à 0,0f (c.-à-d. 100% précis). P> Notez que nous examinons Une valeur positive dans cette propriété représente l'erreur potentielle
entre la valeur rapportée par la propriété magnétrique et le
Direction réelle du nord magnétique. Ainsi, la valeur inférieure de cette
propriété, plus l'en-tête est précis. Une valeur négative signifie que
L'en-tête rapporté est invalide, ce qui peut survenir lorsque l'appareil est
non calibré ou il y a une forte interférence de la magnétique locale
champs. p>
blockQuote> p> Catégorie Code >, pour laquelle l'état des documents d'Apple: P>
sur mon iPhone6 L'accouchement est typiquement 25.0 Donc, il suffit de retourner oui et de s'appuyer sur iOS pour déterminer quand montrer l'écran d'étalonnage semble être la meilleure chose à faire. Jeter les lectures avec une fiducie <0,0 empêche l'utilisation de «mauvais» en-têtes. P>
@Jprogrammer Je crois que c'est une réponse et une réponse valable aussi.
Je ne pense pas que cela soit vrai, j'aime forcer que l'étalonnage est toujours montré, mais il ne sera montré que si le périphérique pense que cela est nécessaire. Quel iOS?
v6 +, et j'utilise des cartes OSM
Mon expérience est si vous êtes à l'extérieur et que vous avez une boussole mécanique, je vois que YPOU doit calibrer l'iPhone à chaque fois que vous l'utilisez. Je tiens donc à forcer la vue d'étalonnage à monter, même lorsque IOS pense que c'est non nécessitant. Mais cela ne fonctionne pas, vous ne pouvez pas le forcer à montrer la fenêtre de Calib. Essayez-le: calibrez-le, puis laissez la vue, entrez à nouveau, voyez-vous la vue de calibrage?
J'ai le problème opposé: la boîte de dialogue d'étalonnage (mise en œuvre exactement comme la vôtre) n'est jamais affichée, même si dans le même endroit (c'est-à-dire assis à mon bureau), l'application "Compass" montre en permanence la boîte de dialogue.