Domanda

Utilizzando evento didUpdateHeading dell'oggetto CLLocationManager, come faccio a convertire i valori heading.x e heading.y risultanti in gradi posso tracciare su un immagine di una bussola?

È stato utile?

Soluzione

Per le voci gradi è possibile utilizzare magneticHeading e trueHeading proprietà invece di x e y.

  

trueHeading

     

L'intestazione (misurato in gradi) rispetto al Nord vero. (Sola lettura)

@property(readonly, nonatomic) CLLocationDirection trueHeading
     

Discussione

     

Il valore di questa proprietà rappresenta il titolo che punta verso il Polo Nord geografico. Il valore di questa proprietà viene sempre segnalato rispetto alla parte superiore del dispositivo, indipendentemente dall'orientamento fisico o l'interfaccia del dispositivo. Il valore 0 rappresenta Nord vero, il 90 rappresenta verso est, 180 rappresenta a causa del Sud, e così via. Un valore negativo indica che il titolo non poteva essere determinata.

Altri suggerimenti

Così ho ruotato UIImageView con l'immagine di una bussola. L'ago del Nord è stato originariamente rivolta verso l'alto nell'immagine.

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)];
        }

Prova:

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

   CLLocationDirection trueNorth = [newHeading trueHeading];

   CLLocationDirection magneticNorth = [newHeading magneticHeading];

}

CLLocationDirection è typedef doppio e così si ottiene il vero o magnetico rotta in gradi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top