iOS判断当前经纬度是否在中国
1、要导入定位工具包。
#import
2、全局CLLocationManager对象,用于定位。一定要全局,不然会因为引用计数变成0导致定位开启就没了后文。一定要全局!一定要全局!重要的事情说三遍。
@property (nonatomic, strong) CLLocationManager *locationManager;
3、创建CLLocationManager对象,开启定位方法。
//开始定位
- (void)startLocation {
if ([CLLocationManager locationServicesEnabled]) {
//CLog(@"--------开始定位");
self.locationManager = [[CLLocationManager alloc]init];
//设置代理
self.locationManager.delegate = self;
//控制定位精度,越高耗电量越
self.locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
// 询问用户总是授权可以定位
[self.locationManager requestWhenInUseAuthorization];
[self.locationManager requestAlwaysAuthorization];
self.locationManager.distanceFilter = 10.0f;
//开始定位
[self.locationManager startUpdatingLocation];
}
}
4、签订代理
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {if ([error code] == kCLErrorDenied) {//CLog(@"访问被拒绝");
}if ([error code] == kCLErrorLocationUnknown) {//CLog(@"无法获取位置信息");
}}
//定位代理经纬度回调
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray*)locations {
CLLocation *newLocation = locations[0];
//拿到定位信息,判断是非是中国,判断码是“CN”
[[[CLGeocoder alloc]init] reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
if (error || placemarks.count == 0) {
NSLog(@"不能确定是在中国");
} else {
CLPlacemark *placemark=[placemarks firstObject];
if ([placemark.ISOcountryCode isEqualToString:@"CN"]) {
NSLog(@"确定是在中国");
} else {
NSLog(@"确定不在中国");
}
}
}];
//系统会一直更新数据,直到选择停止更新,因为我们只需要获得一次经纬度即可,所以获取之后就停止更新
[manager stopUpdatingLocation];
}
5、在infoplist文件中加入Privacy - Location When In Use Usage Description,值为显示的提示信息,可以自定义。
【iOS判断当前经纬度是否在中国】大功告成!
推荐阅读
- 2020-04-07vue中Axios的封装和API接口的管理
- iOS中的Block
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- 2019-08-29|2019-08-29 iOS13适配那点事
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- iOS面试题--基础
- C语言解方程的根和判断是否是闰年
- 对今年以来股市的看法及后期判断
- 接口|axios接口报错-参数类型错误解决
- iOS|iOS 笔记之_时间戳 + DES 加密