獲取手機的指南針和行進方向
阿新 • • 發佈:2019-02-04
Core Location支援兩種方式去獲取方位相關的資訊:
heading
:有磁力計的裝置可以獲得指南針方向.
course
:有GPS的裝置可以獲取裝置的行進方向和速度.
加入方向相關的事件
在info.plist
里加入UIRequiredDeviceCapabilities
相關的鍵:
- magnetometer:磁力計,獲取
heading
資訊 - gps:獲取
course
資訊.
獲取Heading
相關的事件
- 建立
CLLocationManager
物件. - 通過呼叫
headingAvailable
類方法來檢查heading
事件是否有效. - 賦值給location manager的
delegate
. - 如果你要真實的北方,開始定位服務.
- 呼叫
startUpdatingHeading
方法,開始heading
事件的遞送.
- (void)startHeadingEvents {
if (!self.locManager) {
CLLocationManager* theManager = [[[CLLocationManager alloc] init] autorelease];
// Retain the object in a property.
self.locManager = theManager;
locManager.delegate = self;
}
// Start location services to get the true heading.
locManager.distanceFilter = 1000;
locManager.desiredAccuracy = kCLLocationAccuracyKilometer;
[locManager startUpdatingLocation];
// Start heading updates.
if ([CLLocationManager headingAvailable]) {
locManager.headingFilter = 5;
[locManager startUpdatingHeading];
}
}
你賦值給delegate
CLLocationManagerDelegate
協議.當一個新的heading
事件到達時,location manager會呼叫locationManager:didUpdateHeading:
方法去遞送這個事件給app.一旦接收到一個新的事件,檢查headingAccuracy
屬性去確保你接收的資料是有效的.如果你要用的是真實的heading
,在使用它之前,同樣要檢查它是否包含有效的值.- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {
if (newHeading.headingAccuracy < 0)
return;
// Use the true heading if it is valid.
CLLocationDirection theHeading = ((newHeading.trueHeading > 0) ?
newHeading.trueHeading : newHeading.magneticHeading);
self.currentHeading = theHeading;
[self updateHeadingDisplays];
}
當用戶在移動時攻取course
資訊
在獲取當前使用者定位時,就可以獲取course
和速度.
作者:輕雲綠原
連結:https://www.jianshu.com/p/4215da02ca6e
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。