| 指南针图片  IBOutlet UIImageView *compassView | 
 1 #import "ViewController.h"
 2 #import <CoreLocation/CoreLocation.h>
 3 
 4 #define isIOS(version) ([[UIDevice currentDevice].systemVersion floatValue] >= version)
 5 /**
 6  先决条件:真机测试,模拟器上没有磁力计 传感器
 7  
 8  **/
 9 @interface ViewController ()<CLLocationManagerDelegate>
10 
11 /** 位置管理者*/
12 @property (nonatomic, strong) CLLocationManager *locM;
13 /**指南针图片**/
14 @property (weak, nonatomic) IBOutlet UIImageView *compassView;
15 
16 @end
17 
18 @implementation ViewController
19 
20 #pragma mark - 懒加载
21 /** locM属性的懒加载 */
22 -(CLLocationManager *)locM
23 {
24     if (!_locM) {
25             // 1. 创建位置管理者
26         _locM = [[CLLocationManager alloc] init];
27         // 1.1 block , 代理, 通知
28         _locM.delegate = self;
29     
30     }
31     return _locM;
32 }
33 
34 
35 -(void)viewDidLoad
36 {
37     
38     // 获取设备方向
39     // ("磁力计", 判断设备是否支持传感器)
40     
41     if([CLLocationManager headingAvailable])
42     {
43         [self.locM startUpdatingHeading];
44     }else
45     {
46         NSLog(@"dang前不支持");
47     }
48     
49     
50     
51 }
52 
53 
54 
55 #pragma mark - CLLocationManagerDelegate
56 
57 /**
58  *  方向发生改变时调用
59  *
60  *  @param manager    位置管理者
61  *  @param newHeading 方向信息
62  */
63 -(void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
64 {
65     NSLog(@"%@", newHeading);
66     
67     /**
68      *  CLHeading
69         magneticHeading : 磁北角度
70      trueHeading : 真北角度
71      */
72     
73     if(newHeading.headingAccuracy < 0)
74     {
75         return;
76     }
77     
78     // 获取磁北方向(角度)
79     CGFloat angle = newHeading.magneticHeading;
80     
81     // 角度--> 弧度
82     CGFloat hudu = angle / 180.0 * M_PI;
83     
84     
85     [UIView animateWithDuration:1 animations:^{
86         // 反向旋转图片(弧度)
87         self.compassView.transform = CGAffineTransformMakeRotation(-hudu);
88     }];
89 
90     
91     
92     
93 }
94 
95 
96 
97 @end