CLLocationManager и степени заголовка в iPhone - PullRequest
3 голосов
/ 11 января 2010

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

Ответы [ 3 ]

3 голосов
/ 11 января 2010

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

trueHeading

Направление (в градусах) относительно истинного севера. (Только для чтения)

@property(readonly, nonatomic) CLLocationDirection trueHeading

Обсуждение

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

1 голос
/ 12 мая 2012

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

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)];
        }
1 голос
/ 11 января 2010

Попробуйте:

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

   CLLocationDirection trueNorth = [newHeading trueHeading];

   CLLocationDirection magneticNorth = [newHeading magneticHeading];

}

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

...