2010-03-27 108 views
0

如果您面對正東(90度),水平指南針看起來像這樣。在iPhone上實現水平指南針 - 算法?

85----90---95 

如果你是西北面臨由於355度,它應該是這樣的:

350----355---0 

當您轉動指南針,數量應週期從0 - > 360 - > 0

所以,我的問題是,你將如何在iPhone上實現這樣的視圖?我有一對夫婦的想法:

  1. 製作一個長像與所有數字 和刻度線和接班 左/右時,羅盤航向 改變

  2. 創建視圖的片當指南針 標題改變時,將它們追加到 。

  3. 創建一行刻度標記 隨指南針標題移動, 只需根據需要在其上編寫數字。

你會如何解決這個問題?我主要尋找算法建議,但如果你使用代碼或僞代碼來演示,那也是有幫助的。

回答

1

選項一是最簡單的。請記住,您可以合成圖像的一部分來處理換行。

+0

這就是我最終這樣做的結果。這並不難。 – 2010-03-28 09:30:16

+0

這種方法的問題是具有文本的圖像不能很好地縮放,特別是在向更高分辨率設備上採樣時。您還需要花費一定的代碼量來處理擴展二進制文件的特定分辨率的圖像文件。你可以實現一個自定義視圖,並很容易地在'drawRect:'中執行你的繪圖,而且它不會遇到這些問題。 – par 2016-11-27 21:25:29

0

您可以構建標題的模10,並切換爲10,5等等。

-1

您只需要實現位置管理器功能來查找iPhone指向的確切方向。

因此,您可以檢查:

CLLocationManager * locationManager; [locationManager startUpdatingHeading];

,只要你撥打startUpdatingHeading(),它會調用 「 - (空)的LocationManager:(CLLocationManager *)經理didUpdateHeading:(CLHeading *)newHeading」 的方法,你需要從位置管理器覆蓋。

就是這樣,你可以通過newHeading.magneticHeading或newHeading.trueHeading找到iPhone 3GS指向的方向。

你會驚訝,你可以得到完全相同的方向是什麼磁羅盤給你。

1

這裏是執行水平羅盤在iPhone一個完整的解決方案4

如果([CLLocationManager locationServicesEnabled] & & [CLLocationManager headingAvailable]) { m_locationManager = [[CLLocationManager的alloc] INIT]; m_locationManager。desiredAccuracy = kCLLocationAccuracyBest; m_locationManager.headingOrientation = CLDeviceOrientationPortrait ;; m_locationManager.delegate = self; [m_locationManager startUpdatingHeading];

} 

編譯標記CLLocationManagerDelegate方法

  • (無效)的LocationManager:(CLLocationManager *)經理didUpdateHeading:(CLHeading *)newHeading { CLLocationDirection方向= newHeading.magneticHeading; [m_readingsLabel setText:[NSString stringWithFormat:@「Degrees:%f」,direction]];

    float radians = direction * M_PI/180; m_compassImageView.transform = CGAffineTransformMakeRotation(radians); }