我正在做一个AR应用程序,根据具体位置的位置在cameraView中显示UILabel。当iphone指南针指向该位置时,标签显示在屏幕中央 我的问题是,当我转动iphone时,我希望这个标签向左或向右旋转。 我想有一些方法可以将指南针的度数映射到屏幕坐标,这样我就可以将标签重新绘制在屏幕的正确位置,但我无法想象如何做到这一点。 我不需要加速度计来做到这一点,我只需要将罗盘值转换为屏幕坐标。 有谁知道一些解决方案? 谢谢!
答案 0 :(得分:2)
假设您的当前位置和目的地位置以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));
}
然后只需将当前指南针标题减去此标题(或反之亦然)并设置箭头/标记/视图标签的旋转或其他任何内容。
将此用于angleToRadians:
-(float) angleToRadians:(float) a {
return ((a/180)*M_PI);
}