2010-10-27 80 views
0

我正在做一個AR應用程序,根據具體位置的位置顯示cameraView中的UILabel。當iphone的指南針通向該地點時,標籤顯示在屏幕的中心。
我的問題是,我想這個標籤旋轉到左邊或右邊,當我打開iPhone。 我想有一種方法可以將指南針的度數映射到屏幕座標,這樣我就可以在屏幕的正確位置重新繪製標籤,但我無法想象如何做到這一點。 我不需要加速度計來做到這一點,我只需要將指南針值轉換爲屏幕座標。 有人知道一些解決方案嗎? 謝謝!如何將iphone的羅盤值映射到屏幕座標?

+0

我可能會誤解你的問題,但不是你實際上是試圖確定在iphone的旋轉比起始位置,並相應地旋轉標籤的角度? – Rox 2010-10-27 12:23:20

+0

我實際上試圖確定從指南針的方向到屏幕座標的位置。例如,如果我有一個指向北方的標籤,則當指南針朝北時,我希望它顯示在屏幕的中心,如果我將iphone向左或向右轉,則此標籤將繼續指向北方 – 2010-10-27 15:44:37

回答

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)); 
} 

然後,只需減去當前的羅盤航向到這個標題(或反之亦然)和setRotation你的箭頭/標記/視圖標籤或任何。

使用此爲angleToRadians:

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

因此,如果橫向模式下iphone的寬度爲460像素,則YscreenCenter的值爲230.寬度值是從屏幕到哪裏的距離?我不明白什麼代表這個值 – 2010-10-27 15:38:56

+0

我現在明白你的意思,但我的問題是我沒有寬度值(到屏幕中心的距離)。我只有相對於我的位置(度),而我擁有的另外一點是羅盤的標題(以度爲單位)。所以當指南針的標題等於標籤顯示在屏幕中心的位置時。在這一刻,如果我把iPhone轉到右邊,我需要標籤轉向左邊指向的地方,反之亦然。對不起,我已經花了上週的這個問題,我無法解決它,所以非常感謝你的幫助。 – 2010-10-27 17:44:20

+0

1.只需使用一個常量作爲「寬度」。選擇「100」 - 僅用於顯示目的。 2.你的意思是你只需要在標籤上設置「setRotation」? – Brad 2010-10-27 18:49:06

相關問題