博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS-地图定位、CLLocationManager简单使用
阅读量:6650 次
发布时间:2019-06-25

本文共 3924 字,大约阅读时间需要 13 分钟。

hot3.png

地图定位

说明:CLLocationManager 类的简单实用

步骤:

    1、声明全局属

        @property (nonatomic, strong) CLLocationManager *locationManager;  // 定位管理者

    2、在 `- (void)viewDidLoad 方法中` 中实例化`定位管理者对象`

        请求定位授权,以下实现其一即可。

        [self.locationManager requestAlwaysAuthorization];  // 始终使用定位,一般用于地图类应用

        [self.locationManager requestWhenInUseAuthorization];  // 当app运行期间(前台)

        配置info.plis文件,这里配置和代码对应。不要都配置。

        <key>NSLocationWhenInUseUsageDescription</key>

        <string>NSLocationWhenInUseUsageDescription</string>

        <key>NSLocationAlwaysUsageDescription</key>

        <string>使用您当前位置才可以约妹子</string>

    3、设置`定位管理者`代理为当前控制器(self)

    4、遵循代理协议`CLLocationManagerDelegate`

        实现代理方法`- (void)locationManager:(CLLocationManager *)manager 

        didUpdateLocations:(NSArray<CLLocation *> *)locations`,该单例方法调用非常频繁,按需停止定位。

    代码如下:

////  ViewController.m//  CoreLocation-地图定位////  Created by quntion on 16/1/15.//  Copyright © 2016年 quntion. All rights reserved.//    #import "ViewController.h"#import 
        /** @author quntion, 16-01-16 11:01:33     注意事项:    模拟器 记得设置  Debug->location->`custom Location` 否则,模拟器无法模拟当前位置在哪里 */        @interface ViewController ()
@property (nonatomic, strong) CLLocationManager *locationManager;  // 定位管理者@end    @implementation ViewController    - (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.        // 1、位置管理器    CLLocationManager *locationManager = [[CLLocationManager alloc] init];    self.locationManager = locationManager;        // 2、设置`位置管理器`代理    self.locationManager.delegate = self;        // 3、请求用户授权,必须配置info.plist文件,    if ([UIDevice currentDevice].systemVersion.floatValue > 8.0) {        // 请求使用位置定位授权        [self.locationManager requestAlwaysAuthorization];        [self.locationManager requestWhenInUseAuthorization];                /** ---定位精度(认为多少米内都是同一个点)             extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0);  // 导航使用,精度最高             extern const CLLocationAccuracy kCLLocationAccuracyBest;                 // 最高精度             extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters;     // 精确到10米             extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters;        // 精确到100米             extern const CLLocationAccuracy kCLLocationAccuracyKilometer;            // 精确到1000米             extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;      // 精确到3000米         */        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; // 这里可以自定义值                /** ---距离筛选器:移动多大范围,调用一次位置更新            kCLDistanceFilterNone // 设置为该值,告诉系统有任务位置距离改变都调用代理更新方法            如果设置为其他double数值,则告诉系统移动距离大于等于该值,才调用代理更新方法            对应的代理方法:            `- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray
 *)locations`         */        self.locationManager.distanceFilter = 100;  // 距离变化大于100米才调用代理更新                // 启动定位        [self.locationManager startUpdatingLocation];    } else {        NSLog(@"系统版本低于8.0");    }}    #pragma mark - 自定义方法    - (void)compareLocationDistance {    // 北京 经纬度    CLLocation *beijingLocation = [[CLLocation alloc] initWithLatitude:39 longitude:115];        // 上海 经纬度    CLLocation *shanghaiLocation = [[CLLocation alloc] initWithLatitude:30 longitude:120];        // 计算 两点 球面直线距离    CLLocationDistance detalDistance = [beijingLocation distanceFromLocation:shanghaiLocation];        NSLog(@"北京到上海的球面距离=[%lf米] [%lf公里]", detalDistance, detalDistance/1000.0);}        #pragma mark - CLLocatinManager 代理    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray
 *)locations {        NSLog(@"%@", manager);}    #pragma mark - touch 事件    - (void)touchesBegan:(NSSet
 *)touches withEvent:(UIEvent *)event {    [self compareLocationDistance];}    @end

转载于:https://my.oschina.net/quntion/blog/604332

你可能感兴趣的文章
百度地图3.7.1获取当前的位置,并自定义自身位置的图标
查看>>
CuteEditor.Editor+a+a+c+a+a.a() System.RuntimeType.get_Assembly() 问题解决方法
查看>>
Int8 and UInt8 types different from Byte and SByte
查看>>
全面剖析Cocos2d游戏触摸机制 (下)
查看>>
Android 检测网络连接状态(转)
查看>>
Javascript的转义Escape
查看>>
C++结构体中的静态变量
查看>>
JSON.parse()和JSON.stringify()
查看>>
mysql 查排名
查看>>
中国最大的融资平台
查看>>
OO第二单元作业小结
查看>>
[华为机试练习题]37.合唱队
查看>>
犯错了~
查看>>
[PHP] 最简单的权限控制设计
查看>>
在虚拟机和主机之间共享文件夹
查看>>
用户场景描述
查看>>
JSAP107
查看>>
cocos2d-x学习笔记12:如何将win32移植到iOS
查看>>
你们可能都小看了Windows!
查看>>
linux下mrtg,cacti,nagios,ganglia的搭建和win/linux主机等的监控。
查看>>