3

使用 CLLocationManager 对象的 didUpdateHeading 事件,如何将生成的 heading.x 和 heading.y 值转换为可以绘制到指南针图像上的度数?

4

3 回答 3

3

对于标题度数,您可以使用magneticHeadingandtrueHeading属性而不是xand y

真航向

相对于真北的航向(以度为单位)。(只读)

@property(readonly, nonatomic) CLLocationDirection trueHeading

讨论

此属性中的值表示指向地理北极的航向。此属性中的值始终相对于设备顶部报告,无论设备的物理或界面方向如何。值 0 表示正北,90 表示正东,180 表示正南,依此类推。负值表示无法确定航向。

于 2010-01-11T17:50:16.163 回答
1

尝试:

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

   CLLocationDirection trueNorth = [newHeading trueHeading];

   CLLocationDirection magneticNorth = [newHeading magneticHeading];

}

CLLocationDirection 是 typedef double 类型,因此您可以获得以度数为单位的真航向或磁航向。

于 2010-01-11T17:56:04.873 回答
1

这就是我使用指南针图像旋转 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)];
        }
于 2012-05-12T09:46:34.070 回答