指南针图片 IBOutlet UIImageView *compassView |
1 #import "ViewController.h"
#import <CoreLocation/CoreLocation.h>
#define isIOS(version) ([[UIDevice currentDevice].systemVersion floatValue] >= version)
/**
先决条件:真机测试,模拟器上没有磁力计 传感器
**/
@interface ViewController ()<CLLocationManagerDelegate>
/** 位置管理者*/
@property (nonatomic, strong) CLLocationManager *locM;
/**指南针图片**/
@property (weak, nonatomic) IBOutlet UIImageView *compassView;
@end
@implementation ViewController
#pragma mark - 懒加载
/** locM属性的懒加载 */
-(CLLocationManager *)locM
{
if (!_locM) {
// 1. 创建位置管理者
_locM = [[CLLocationManager alloc] init];
// 1.1 block , 代理, 通知
_locM.delegate = self;
}
return _locM;
}
-(void)viewDidLoad
{
// 获取设备方向
// ("磁力计", 判断设备是否支持传感器)
if([CLLocationManager headingAvailable])
{
[self.locM startUpdatingHeading];
}else
{
NSLog(@"dang前不支持");
}
}
#pragma mark - CLLocationManagerDelegate
/**
* 方向发生改变时调用
*
* @param manager 位置管理者
* @param newHeading 方向信息
*/
-(void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
{
NSLog(@"%@", newHeading);
/**
* CLHeading
magneticHeading : 磁北角度
trueHeading : 真北角度
*/
if(newHeading.headingAccuracy < )
{
return;
}
// 获取磁北方向(角度)
CGFloat angle = newHeading.magneticHeading;
// 角度--> 弧度
CGFloat hudu = angle / 180.0 * M_PI;
[UIView animateWithDuration: animations:^{
// 反向旋转图片(弧度)
self.compassView.transform = CGAffineTransformMakeRotation(-hudu);
}];
}
@end