2015-04-02 135 views
0

如何获取相机视线角度(相对于北,以度为单位,零为北,180为南)图片是使用iPhone拍摄的(而不是设备移动的位置)?例如,我朝北(0度)方向行走,在我的右侧(90度)拍摄一张照片,我想要90度作为我的结果,因为那是iPhone系列产品,视角相对于北方。当拍摄照片时计算iPhone相机视线角度(相对于北)

在+/- 20度范围内有点准确的结果很好。

回答

0

使用CMMotionManager类,用于接收运动数据。不要忘记包含CoreMotion框架。

#import <CoreMotion/CoreMotion.h> 

- (void)startProcess 
{ 
    CMMotionManager *motionManager = [CMMotionManager new]; 
    motionManager.deviceMotionUpdateInterval = .2; 

    if (motionManager.deviceMotionAvailable) { 
     NSOperationQueue *motionQueue = [[NSOperationQueue alloc] init]; 
     CMAttitudeReferenceFrame attitudeFrame = CMAttitudeReferenceFrameXTrueNorthZVertical; 
     [motionManager startDeviceMotionUpdatesUsingReferenceFrame:attitudeFrame 
                  toQueue:motionQueue 
                 withHandler:^ (CMDeviceMotion *newMotionData, NSError *newError) { 
                CMAcceleration gravity = motionData.gravity; 
                CGFloat rotation = [self rotationForGravity:gravity]; 
               });   
              }]; 
    } 

- (CGFloat)rotationForGravity:(CMAcceleration)customGravity 
{ 
    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; 

    if(orientation == UIInterfaceOrientationLandscapeLeft) 
     return customGravity.y; 
    else 
     return -customGravity.y; 
} 
+0

感谢@Pablo的详细答案。我错误地描述了这个问题。我希望iPhone相机的视线相对于真正的北(不是设备移动的地方)。例如,我正朝北0度方向走,向右拍摄90度的照片,我想要90度作为我的结果,因为那是iPhone相对于北方的视线角度。 – user2992766 2015-04-02 14:21:40

+2

哦,那么你可能可以使用motionData.magneticField而不是重力和旋转,还没有测试过它,但它应该给你来自北部的弧度。希望这可以帮助。 – 2015-04-02 14:30:34

相关问题