Вопрос

Используя событие didUpdateHeading объекта CLLocationManager, как мне преобразовать результирующие значения heading.x и heading.y в градусы, которые я могу нанести на изображение компаса?

Это было полезно?

Решение

Для степеней заголовков вы можете использовать magneticHeading и trueHeading свойства вместо x и y.

trueHeading

Курс (измеряется в градусах) относительно истинного севера.(только чтение)

@property(readonly, nonatomic) CLLocationDirection trueHeading

Обсуждение

Значение этого свойства представляет собой курс, указывающий на географический Северный полюс.Значение этого свойства всегда указывается относительно верхней части устройства, независимо от его физической ориентации или ориентации интерфейса.Значение 0 представляет истинный север, 90 — строго на восток, 180 — строго на юг и т. д.Отрицательное значение указывает на то, что заголовок не может быть определен.

Другие советы

Вот как я повернул uiimageview с изображением компаса.Первоначально Северная стрелка на изображении была направлена вверх.

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

Пытаться:

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

   CLLocationDirection trueNorth = [newHeading trueHeading];

   CLLocationDirection magneticNorth = [newHeading magneticHeading];

}

CLLocationDirection имеет тип typedef double, поэтому вы получаете истинный или магнитный курс в градусах.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top