CLLocationManager et degrés de la position dans l'iPhone
-
20-09-2019 - |
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?
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.