Question

Utilisation de l'événement didUpdateHeading de l'objet CLLocationManager, comment puis-je convertir les valeurs de heading.x et heading.y résultant en degrés je peux tracer sur une image d'une boussole?

Était-ce utile?

La solution

Pour les positions degres pouvez utiliser magneticHeading et trueHeading propriétés au lieu de x et y.

  

trueHeading

     

Le cap (mesuré en degrés) par rapport au nord vrai. (Lecture seule)

@property(readonly, nonatomic) CLLocationDirection trueHeading
     

Discussion

     

La valeur de cette propriété représente la rubrique qui pointe vers le pôle Nord géographique. La valeur de cette propriété est toujours rapporté par rapport à la partie supérieure du dispositif, quelle que soit l'orientation physique ou de l'interface de l'appareil. La valeur 0 représente le Nord vrai, représente 90 à cause de l'Est, 180 représente en raison du Sud, et ainsi de suite. Une valeur négative indique que le titre n'a pas pu être déterminée.

Autres conseils

Voilà comment j'entraînée en rotation UIImageView avec l'image d'une boussole. L'aiguille du Nord pointait vers le haut à l'origine dans l'image.

if (self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
            NSLog(@"UIInterfaceOrientationLandscapeLeft");
            [self.compassImageViewIphone setTransform:CGAffineTransformMakeRotation((((newHeading.magneticHeading - 90) *3.14/180)*-1) )];

        }else if (self.interfaceOrientation == UIInterfaceOrientationLandscapeRight){
            NSLog(@"UIInterfaceOrientationLandscapeRight");
            [self.compassImageViewIphone setTransform:CGAffineTransformMakeRotation((((newHeading.magneticHeading + 90) *3.14/180)*-1))];

        }else if (self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
            NSLog(@"UIInterfaceOrientationPortraitUpsideDown");
            [self.compassImageViewIphone setTransform:CGAffineTransformMakeRotation((((newHeading.magneticHeading + 180) *3.14/180)*-1) )];

        }else{
            NSLog(@"Portrait");
            [self.compassImageViewIphone setTransform:CGAffineTransformMakeRotation((newHeading.magneticHeading *3.14/180)*-1)];
        }

Essayez:

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

   CLLocationDirection trueNorth = [newHeading trueHeading];

   CLLocationDirection magneticNorth = [newHeading magneticHeading];

}

CLLocationDirection est typedef double et vous obtiendrez la tête magnétique ou en degrés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top