En utilisant l'événement didUpdateHeading de l'objet CLLocationManager, comment puis-je convertir les valeurs heading.x et heading.y résultantes en degrés que je peux tracer sur une image d'une boussole?CLLocationManager et degrés d'en-tête dans l'iPhone
Répondre
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 indiquée par rapport au sommet du périphérique, quelle que soit l'orientation physique ou de l'interface du périphérique. La valeur 0 représente le nord vrai, 90 représente le plein est, 180 le plein sud et ainsi de suite. Une valeur négative indique que le titre n'a pas pu être déterminé.
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.
Voici comment j'ai fait pivoter la vue d'image avec l'image d'une boussole. L'aiguille nord était à l'origine pointée vers le haut 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)];
}
true n'est pas un nom de variable valide. –