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


最后在  ViewController 里调用  

当然,调用的位置根据需要可以随时更改

@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);

    }];

}





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值