如何映射iphone';将指南针值设置为屏幕坐标?

如何映射iphone';将指南针值设置为屏幕坐标?,iphone,objective-c,xcode,Iphone,Objective C,Xcode,我正在做一个AR应用程序,根据一个具体地点的位置在摄像机中显示一个UILabel。当iphone的指南针指向该位置时,标签显示在屏幕中央。 我的问题是,当我转动iphone时,我希望标签向左或向右旋转。 我想有某种方法可以将罗盘的度数映射到屏幕坐标,这样我就可以在屏幕的正确位置重新绘制标签,但我无法想象如何做到这一点。 我不需要加速计来做这件事,我只需要将罗盘值转换成屏幕坐标。 有人知道一些解决办法吗? 谢谢大家! 假设您的当前位置和目标位置用CLLocationCoordinate2D表示-使

我正在做一个AR应用程序,根据一个具体地点的位置在摄像机中显示一个UILabel。当iphone的指南针指向该位置时,标签显示在屏幕中央。
我的问题是,当我转动iphone时,我希望标签向左或向右旋转。 我想有某种方法可以将罗盘的度数映射到屏幕坐标,这样我就可以在屏幕的正确位置重新绘制标签,但我无法想象如何做到这一点。 我不需要加速计来做这件事,我只需要将罗盘值转换成屏幕坐标。 有人知道一些解决办法吗?
谢谢大家!

假设您的当前位置和目标位置用CLLocationCoordinate2D表示-使用以下公式获得从源到目标的角度(弧度):

- (float) getHeadingForDirectionFromCoordinate:(CLLocationCoordinate2D)fromLoc toCoordinate:(CLLocationCoordinate2D)toLoc

{

    float fLat = [self angleToRadians:fromLoc.latitude];
    float fLng = [self angleToRadians:fromLoc.longitude];
    float tLat = [self angleToRadians:toLoc.latitude];
    float tLng = [self angleToRadians:toLoc.longitude];

    return atan2(sin(tLng-fLng)*cos(tLat), cos(fLat)*sin(tLat)-sin(fLat)*cos(tLat)*cos(tLng-fLng));
}  
然后只需将当前指南针航向减去该航向(或vica反之),然后设置箭头/标记/视图标签的旋转或其他

将此用于角半径:

-(float) angleToRadians:(float) a {
    return ((a/180)*M_PI);
}

我可能误解了你的问题,但你不是真的试图确定iphone相对于起始位置的旋转角度,并相应地旋转标签吗?我实际上是试图从指南针的方向确定屏幕坐标中的位置。例如,如果我有一个指向北方的标签,我希望当指南针指向北方时,它出现在屏幕中央,如果我将iphone向左或向右转动,此标签将继续指向北方。因此,如果iphone在横向模式下的宽度为460像素,YSCreenceCenter值将为230。宽度值是从屏幕到何处的距离?我不明白这个值代表什么我现在明白了,但我的问题是我没有宽度值(到屏幕中心的距离)。我只知道这个地方相对于我的位置(以度为单位),还有一个是指南针的航向(以度为单位)。因此,当指南针航向等于位置时,标签显示在屏幕中心。此时,如果我将iphone转向右侧,我需要标签向左指向该位置,反之亦然。再次抱歉,我上周一直在处理这个问题,我无法解决它,因此非常感谢您的帮助。1。只需使用一个常量作为“宽度”。选择“100”-这只是为了显示。2.你的意思是你只需要在标签上“设置旋转”吗?对,我只需要在一个点的方向上旋转标签,就像指南针中的箭头一样,当你转动指南针时,箭头继续指向北方,所以当我转动iphone时,我的标签必须旋转,但它必须指明特定的位置。在你写的文章中,我还需要标签放置位置的角度,我明白。修改“答案”以更好地反映。