• CLLocationManager 在ios8定位功能实现


    1 导入框架 CoreLocation.framework

    2 导入头文件 

    #import <CoreLocation/CoreLocation.h>

    3 遵守代理

    <CLLocationManagerDelegate>

    4 设置全局属性

    @property (strong, nonatomic) CLLocationManager* locationManager;

    5 viewdidload里面 

    [self startLocation];

     1 //开始定位
     2 -(void)startLocation
     3 {
     4     self.locationManager = [[CLLocationManager alloc] init];
     5     self.locationManager.delegate = self;
     6     self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
     7     self.locationManager.distanceFilter = 10.0f;
     8     
     9     if ([[[UIDevice currentDevice] systemVersion] doubleValue] > 8.0)
    10     {
    11         //设置定位权限 仅ios8有意义
    12         // [self.locationManager requestWhenInUseAuthorization];// 前台定位
    13         
    14           [self.locationManager requestAlwaysAuthorization];// 前后台同时定位
    15     }
    16     [self.locationManager startUpdatingLocation];
    17 }

    6 info.plist增加字段,(ios8 必须要)一般无法弹出获取定位权限的alert的原因就在这

       NSLocationWhenInUseUsageDescription   //允许在前台获取GPS的描述
       NSLocationAlwaysUsageDescription   //允许在前、后台获取GPS的描述 

    此处设置必须和第5步的定位权限对应上,如果是前台定位,就在plist里面NSLocationWhenInUseUsageDescription

    并不是 俩项都必须要加

    效果图:

    7 定位成功后的代理方法

     1 //定位代理经纬度回调
     2 -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
     3     
     4     [self.locationManager stopUpdatingLocation];
     5     //    NSLog(@"location ok");
     6     //
     7     //    NSLog(@"%@",[NSString stringWithFormat:@"经度:%3.5f
    纬度:%3.5f",newLocation.coordinate.latitude,newLocation.coordinate.longitude]);
     8     
     9     CLGeocoder * geoCoder = [[CLGeocoder alloc] init];
    10     [geoCoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
    11         for (CLPlacemark * placemark in placemarks) {
    12             
    13             NSDictionary *test = [placemark addressDictionary];
    14             //  Country(国家)  State(城市)  SubLocality(区)
    15             self.title = [test objectForKey:@"City"];
    16         }
    17     }];
    18     
    19 }

    定位失败的回调:

     1 /**
     2  *  1 定位失败的回调
     3  *  2 或者是用户点击了不允许定位的时候
     4  */
     5 - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
     6 {
     7     if ([error code] == kCLErrorDenied)
     8     {
     9         //访问被拒绝
    10     }
    11     if ([error code] == kCLErrorLocationUnknown) {
    12         //无法获取位置信息
    13     }
    14 }
  • 相关阅读:
    百度网盘下载太慢,试试阿里云网盘?
    linux使用过程中遇到的常见问题
    vscode设置护眼色
    为什么程序员互相之间不能透露薪水?
    机器学习:支持向量机(SVM)
    Java多线程总结(三)
    Java多线程总结(二)
    Java多线程总结(一)
    8.多线程--避免活跃性危险
    7.多线程--线程池的使用
  • 原文地址:https://www.cnblogs.com/txios/p/4390059.html
Copyright © 2020-2023  润新知