CLLocationManager e graus de título no iPhone
-
20-09-2019 - |
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?
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.