指南针图片 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