- (void)viewDidLoad {
[super viewDidLoad];
_manager = [[CLLocationManager alloc] init];
//从IOS8(Xcode6)开始,定位权限必须主动申请,首先在info.plist中添加NSLocationWhenInUseUsageDescription或NSLocationAlwaysUsageDescription字段,然后调用此方法。
[_manager requestWhenInUseAuthorization];
_manager.delegate = self;
//headingAvailable判断设备是否支持方向识别。
if ([CLLocationManager headingAvailable]) {
NSLog(@"设备支持方向识别");
//设置监视精确度(当方向该变量达到多少时才调用代理方法)。
_manager.headingFilter = 1;
//开启方向监视。当设备方向发生变化时,就会调用方向更新的代理方法。
//[_manager startUpdatingHeading];
}else{
NSLog(@"设备不支持方向识别");
}
//判断设备的定位功能是否可用。
if ([CLLocationManager locationServicesEnabled]) {
NSLog(@"定位可用");
//设置调用位置改变方法的最小移动距离。
_manager.distanceFilter = kCLDistanceFilterNone;
//设置定位的精确度,最小可以精确到米。
_manager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
//如果定位可用,开启位置监视。
[_manager startUpdatingLocation];
}else{
NSLog(@"定位不可用");
}
//创建一个坐标点
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(34.729420, 113.746134);
//根据坐标点和半径生成一个圆形区域。
CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:coordinate radius:50 identifier:@"region1"];
//开启区域监视。当设备进入区域或者离开区域时都会调用对应的协议方法。
[_manager startMonitoringForRegion:region];
}
//北:0,东:90,南:180,西270.
NSLog(@"磁力计方向%f",newHeading.magneticHeading);
NSLog(@"真实方向%f",newHeading.trueHeading);
}
//CLLocation表示一个定位信息
CLLocation *location = [locations lastObject];
//timestamp表示这次定位的时间
NSDate *date = location.timestamp;
//判断定位的时间是否距离现在过长,
double time = [date timeIntervalSinceNow];
if (ABS(time)<10) {
//location.coordinate,坐标。
NSLog(@"纬度%f",location.coordinate.latitude);
NSLog(@"经度%f",location.coordinate.longitude);
}
}
}
}
[_manager stopUpdatingHeading];
[_manager stopUpdatingLocation];
}
[super viewDidLoad];
_manager = [[CLLocationManager alloc] init];
//从IOS8(Xcode6)开始,定位权限必须主动申请,首先在info.plist中添加NSLocationWhenInUseUsageDescription或NSLocationAlwaysUsageDescription字段,然后调用此方法。
[_manager requestWhenInUseAuthorization];
_manager.delegate = self;
//headingAvailable判断设备是否支持方向识别。
if ([CLLocationManager headingAvailable]) {
NSLog(@"设备支持方向识别");
//设置监视精确度(当方向该变量达到多少时才调用代理方法)。
_manager.headingFilter = 1;
//开启方向监视。当设备方向发生变化时,就会调用方向更新的代理方法。
//[_manager startUpdatingHeading];
}else{
NSLog(@"设备不支持方向识别");
}
//判断设备的定位功能是否可用。
if ([CLLocationManager locationServicesEnabled]) {
NSLog(@"定位可用");
//设置调用位置改变方法的最小移动距离。
_manager.distanceFilter = kCLDistanceFilterNone;
//设置定位的精确度,最小可以精确到米。
_manager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
//如果定位可用,开启位置监视。
[_manager startUpdatingLocation];
}else{
NSLog(@"定位不可用");
}
//创建一个坐标点
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(34.729420, 113.746134);
//根据坐标点和半径生成一个圆形区域。
CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:coordinate radius:50 identifier:@"region1"];
//开启区域监视。当设备进入区域或者离开区域时都会调用对应的协议方法。
[_manager startMonitoringForRegion:region];
}
当设备方向发生变化时调用
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading{//北:0,东:90,南:180,西270.
NSLog(@"磁力计方向%f",newHeading.magneticHeading);
NSLog(@"真实方向%f",newHeading.trueHeading);
}
当设备位置发生变化时调用
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{//CLLocation表示一个定位信息
CLLocation *location = [locations lastObject];
//timestamp表示这次定位的时间
NSDate *date = location.timestamp;
//判断定位的时间是否距离现在过长,
double time = [date timeIntervalSinceNow];
if (ABS(time)<10) {
//location.coordinate,坐标。
NSLog(@"纬度%f",location.coordinate.latitude);
NSLog(@"经度%f",location.coordinate.longitude);
}
}
当设备进入某个区域时调用
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region{}
当设备离开某个区域时调用
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region{}
当定位失败时调用
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{[_manager stopUpdatingHeading];
[_manager stopUpdatingLocation];
}