iOS学习笔记之-定位
说明一下大家看我的文章会发现,虽然讲解的都是基础,但是没有深入的去讲解某一个api具体的内容,想了解内容的可以去看官网,我这里只是讲解简单应用。
定位服务也是我们开发中经常使用的一个功能,这次我们用oc自带库来实现定位服务。首先要倒入framework
然后在plist文件里增加
<key>NSLocationAlwaysUsageDescription</key>
<string>App需要您的同意,才能始终访问位置</string>
<key>NSLocationUsageDescription</key>
<string>App需要您的同意,才能访问位置</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>App需要您的同意,才能在使用期间访问位置</string>
第三步,新建类 GETLocation 继承 NSObject
GETLocation.h
#import <Foundation/Foundation.h>
//定义block 回传
typedef void(^LocationBlock)(NSString * lat ,NSString * lon);
@interface GETLocation : NSObject
+(instancetype)sharedManager;
-(void)getGps:(LocationBlock)block;
@end
------------------------------------------------------
GETLocation.m
#import "GETLocation.h"
#import <CoreLocation/CoreLocation.h>
/**扩展**/
@interface GETLocation()<CLLocationManagerDelegate>
@property(nonatomic,strong) CLLocationManager * locManager;
@property(nonatomic,copy)LocationBlock block;
@end
@implementation GETLocation
//使用单粒模式
+(instancetype)sharedManager{
static GETLocation * _getLocation;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_getLocation = [[GETLocation alloc]init];
});
return _getLocation;
}
//需要重写init方法
- (instancetype)init
{
self = [super init];
if (self) {
//初始化
_locManager = [[CLLocationManager alloc]init];
//设置精确度
[_locManager setDesiredAccuracy:kCLLocationAccuracyBest];
//定位精确到几百米
_locManager.distanceFilter=100;
_locManager.delegate = self;
//判断服务是否开启
if (![CLLocationManager locationServicesEnabled]) {
NSLog(@"请开启位置服务!!!");
}else{
//开启要判断使用方式:前台,后台,前后台
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
if (status == kCLAuthorizationStatusNotDetermined) {
//没有选中状态 未知 将状态变成前台
[_locManager requestWhenInUseAuthorization];
}
}
}
return self;
}
/*代理方法 获得经纬度(- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray<CLLocation *> *)locations __OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_6_0);) 这个代理也是可以的*/
-(void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation{
CLLocationCoordinate2D coor = newLocation.coordinate;
NSString * lat= [NSString stringWithFormat:@"%@",@(coor.latitude)];
NSString * lon= [NSString stringWithFormat:@"%@",@(coor.longitude)];
self.block(lat, lon);
//关闭定位
[self.locManager stopUpdatingLocation];
}
-(void)getGps:(LocationBlock)block{
self.block= block;
//开始定位
[self.locManager startUpdatingLocation];
}
@end
当然,调用的位置根据需要可以随时更改
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[[GETLocation sharedManager]getGps:^(NSString *lat, NSString *lon) {
NSLog(@"lat:%@,lon:%@",lat,lon);
}];
}