Pergunta

Usando o evento didUpdateHeading do objeto CLLocationManager, como faço para converter os valores heading.x e heading.y resultantes em graus I pode traçar sobre uma imagem de uma bússola?

Foi útil?

Solução

Para as posições graus você pode usar magneticHeading e trueHeading propriedades em vez de x e y.

trueHeading

O título (medida em graus) em relação ao norte verdadeiro. (Somente leitura)

@property(readonly, nonatomic) CLLocationDirection trueHeading

Discussão

O valor neste propriedade representa o título que aponta para o pólo norte geográfico. O valor nesta propriedade é sempre reportado em relação à parte superior do dispositivo, independentemente da orientação física ou a interface do dispositivo. O valor 0 representa o verdadeiro Norte, 90 representa o Leste, 180 representa devido Sul, e assim por diante. Um valor negativo indica que o título não pôde ser determinado.

Outras dicas

Isto é como eu rodado o uiimageview com a imagem de uma bússola. A agulha do Norte foi originalmente que aponta para cima na imagem.

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

Tente:

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

   CLLocationDirection trueNorth = [newHeading trueHeading];

   CLLocationDirection magneticNorth = [newHeading magneticHeading];

}

CLLocationDirection é typedef dobrar e de modo a obter o título verdadeiro ou magnético em graus.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top