在ios8.0以上获取经纬度时,需要申请授权,否则不能定位
第一步:
在 HomeViewController.m
@interfaceHomeViewController ()<CLLocationManagerDelegate>
{
//定位
CLLocationManager *_locationManager;//用于获取位置
CLLocation *_checkLocation;//用于保存位置信息
double _latitude;//经度
double _longitude;//维度
CLLocationManager *_locationManager;//用于获取位置
CLLocation *_checkLocation;//用于保存位置信息
double _latitude;//经度
double _longitude;//维度
}
第二步:
//设置定位
-(void)setupLocationManager{
_latitude = LATITUDE_DEFAULT;//设置默认的值
_longitude =LONGITUDE_DEFAULT;
_locationManager = [[CLLocationManageralloc]init];
if ([CLLocationManagerlocationServicesEnabled]) {
NSLog(@"开始定位");
_locationManager.delegate = self;
// distanceFilter是距离过滤器,为了减少对定位装置的轮询次数,位置的改变不会每次都去通知委托,而是在移动了足够的距离时才通知委托程序
//它的单位是米,这里设置为至少移动1000再通知委托处理更新;
_locationManager.distanceFilter = 200.0;
// kCLLocationAccuracyBest:设备使用电池供电时候最高的精度
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
//ios8+以上要授权,并且在plist文件中添加NSLocationWhenInUseUsageDescription,NSLocationAlwaysUsageDescription,值可以为空
if (IOS_VERSION >=8.0) {//ios8+,不加这个则不会弹框
[_locationManagerrequestWhenInUseAuthorization];//使用中授权
[_locationManagerrequestAlwaysAuthorization];
}
[_locationManagerstartUpdatingLocation];
}else{
_locationManager = [[CLLocationManageralloc]init];
if ([CLLocationManagerlocationServicesEnabled]) {
NSLog(@"开始定位");
_locationManager.delegate = self;
// distanceFilter是距离过滤器,为了减少对定位装置的轮询次数,位置的改变不会每次都去通知委托,而是在移动了足够的距离时才通知委托程序
//它的单位是米,这里设置为至少移动1000再通知委托处理更新;
_locationManager.distanceFilter = 200.0;
// kCLLocationAccuracyBest:设备使用电池供电时候最高的精度
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
//ios8+以上要授权,并且在plist文件中添加NSLocationWhenInUseUsageDescription,NSLocationAlwaysUsageDescription,值可以为空
if (IOS_VERSION >=8.0) {//ios8+,不加这个则不会弹框
[_locationManagerrequestWhenInUseAuthorization];//使用中授权
[_locationManagerrequestAlwaysAuthorization];
}
[_locationManagerstartUpdatingLocation];
}else{
NSLog(@"定位失败,请确定是否开启定位功能");
}
}
第三步
#pragma mark - CLLocationManagerDelegate
//ios 6.0sdk以上
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray*)locations{
NSLog(@"didUpdateToLocation+++");
//此处locations存储了持续更新的位置坐标值,取最后一个值为最新位置,如果不想让其持续更新位置,则在此方法中获取到一个值之后让locationManager stopUpdatingLocation
CLLocation *cl = [locationslastObject];
_latitude = cl.coordinate.latitude;
_longitude = cl.coordinate.longitude;
NSLog(@"纬度--%f",_latitude);
NSLog(@"经度--%f",_longitude);
}
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
NSLog(@"定位失败");
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray*)locations{
NSLog(@"didUpdateToLocation+++");
//此处locations存储了持续更新的位置坐标值,取最后一个值为最新位置,如果不想让其持续更新位置,则在此方法中获取到一个值之后让locationManager stopUpdatingLocation
CLLocation *cl = [locationslastObject];
_latitude = cl.coordinate.latitude;
_longitude = cl.coordinate.longitude;
NSLog(@"纬度--%f",_latitude);
NSLog(@"经度--%f",_longitude);
}
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
NSLog(@"定位失败");
}
这时运行程序,发现还是没有打印出经纬度信息,这是因为还需要在plist文件中添加NSLocationWhenInUseUsageDescription,NSLocationAlwaysUsageDescription,值可以为空