一、實(shí)現(xiàn)原理:
1.通過(guò)傳感器,獲取設(shè)備朝向
2.根據(jù)設(shè)備朝向反向旋轉(zhuǎn)"指南針"圖片
二、磁北角度? 真北角度:
磁北(magnetic north)是指南針?biāo)甘镜谋保@主要是由于地球的磁場(chǎng)兩極與地理上的南北兩極不重合,因此指南針指示的北為磁北而非真北,磁北會(huì)隨著時(shí)間而變化。真北(True North, TN)是大家看地圖或者地球儀上所有經(jīng)線的起始點(diǎn),也叫地理北極。真正的北極點(diǎn)很難測(cè)量,要用到衛(wèi)星,所以我們?cè)谌粘I钪械貓D中用到的只是磁北。

三、實(shí)例代碼
1.準(zhǔn)備一張指南針的圖片(下面圖片可以使用)

2.導(dǎo)入CoreLocation框架以及對(duì)應(yīng)的主頭文件并且設(shè)置代理
3.懶加載創(chuàng)建CLLocationManager對(duì)象并設(shè)置代理
- (CLLocationManager *)lM
{
if (!_lM) {
_lM = [[CLLocationManager alloc] init];
_lM.delegate = self;
// 每隔多少度更新一次
_lM.headingFilter = 2;
}
return _lM;
}
4. 調(diào)用方法, 開始獲取設(shè)備朝向??
[self.locationMstartUpdatingHeading];
5. 在對(duì)應(yīng)的代理方法中獲取設(shè)備朝向信息
#pragma mark - CLLocationManagerDelegate
/***? 獲取到手機(jī)朝向時(shí)調(diào)用
*
*? @param manager? ? 位置管理者
*? @param newHeading 朝向?qū)ο?br>*/-(void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
{
/**
*? CLHeading
*? magneticHeading : 磁北角度
*? trueHeading : 真北角度
*/NSLog(@"%f", newHeading.magneticHeading);
CGFloat angle = newHeading.magneticHeading;
// 把角度轉(zhuǎn)弧度
CGFloat angleR = angle / 180.0 * M_PI;// 旋轉(zhuǎn)圖片
[UIView animateWithDuration:0.25 animations:^{
self.compassView.transform = CGAffineTransformMakeRotation(-angleR);
}];
}