From http://furnacedigital.blogspot.com/2011/12/magnetometer.html
取得指南針 / 羅盤 / Magnetometer 數值的方法
目前大部份的 iOS 裝置都有支援 Magnetometer 指南針的功能,透過 Core Location 的Framework 就可以輕易取得 Magnetometer 當前的數值(角度),請看以下程式碼示範。
首先加入對應的 Framework,與標頭檔,如果不知道如何新增 Framework 的讀者們,可以參考 Xcode 4 新增 Framework 的方法一文。
|
1
|
#import <CoreLocation/CoreLocation.h>
|
之後在對應的 Class 中設定 CLLocationManagerDelegate 的代理方法,並增加一個 CLLocationManager 型態的指標 locationManager,如下(此範例是寫在 ViewCotroller 中)。
|
1
2
3
4
|
@interfaceMLViewController :UIViewController<CLLocationManagerDelegate> {
CLLocationManager*locationManager;
}
|
接著 回到程式碼中對 locationManager 進行初始化的動作,並且設定其更新的角度度數。
|
1
2
3
4
5
6
7
8
9
|
//locationManager初始化(已使用ARC機制)
locationManager = [[CLLocationManageralloc] init];
locationManager.delegate =self;
//設定需要重新定位的角度差距
locationManager.headingFilter =3;
[locationManager startUpdatingLocation];
[locationManager startUpdatingHeading];
|
完成上述設置之後,下面我們就可以開始使用 Framework 所提供的功能來取得指南針的角度讀數,每當指南針的角度變化大於上述所設定的角度差距,就會呼叫下列的內建函式。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
//內建函式
- (void)locationManager:(CLLocationManager*)manager didUpdateHeading:(CLHeading*)newHeading {
//判斷magneticHeading的精準度
if(newHeading.headingAccuracy >0) {
//取得角度值-磁北(0-北, 90-東, 180-南, 270-西)
CLLocationDirectiontheHeading = newHeading.magneticHeading;
//取得角度值-正北(0-北, 90-東, 180-南, 270-西)
//CLLocationDirection theHeading = newHeading.trueHeading;
NSLog(@"%f", theHeading);
} else{
NSLog(@"需校正");
}
}
|
上述程式碼中 headingAccuracy 是一個 double 形態的唯讀值,它代表了真正磁北與 magneticHeading 之間的誤差值,正常運作下 headingAccuracy 皆為正值,如果出現負數則代表 magneticHeading 要做 8 字形的校正。
若在使用上有需要系統做校正上的提示,可以使用下列內建函式,並回傳一個 YES 的布林值。
ps:有關 Core Location 的其它應用,可以參考使用 Core Location 做簡易的定位ㄧ文。
|
1
2
3
4
|
//內建函式
- (BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager*)manager {
returnYES;
}
|
ps:有關 Core Location 的其它應用,可以參考使用 Core Location 做簡易的定位ㄧ文。
文章標籤
全站熱搜
