iOS学习——自动定位
最近在项目中需要做自动定位功能,就是你在参加会议通过扫描二维码签到的时候自动定位并将你的定位信息在签到中上传,这样可以避免我们进行假签到。在这个功能中,主要用到的是系统自带的定位模块,首先我们是需要配置定位功能的参数,然后当我们定位成功时调用特定的方法进行相应操作就可以了,当然,在定位失败时我们也可以进行相应的操作,这些都有对应的一些回调方法,我们只需要重写对应的回调方法就可以实现对应的功能了。
首先,我们用到的系统自带的定位模块是: <CoreLocation/CoreLocation.h> ,定位成功/失败的方法都是通过代理 CLLocationManagerDelegate 来完成的,所以我们在需啊哟进行定位的类中也需要继承自代理,并实现对应的一些方法才能成功完成回调。在定位功能的调用中,主要分为两步:1、定位参数的配置;2、代理回调方法的实现。
一 定位参数的配置
定位参数的配置主要是通过系统的定位管理器CLLocationManager进行配置,参数配置的几个要点主要是设置代理,设置寻址精度,然后开启定位。当然,这些参数的配置的前提是我们的手机已经对我们的项目进行了地理位置的授权,所以我们再配置之前需要对当前定位权限进行判断,通过 [CLLocationManager locationServicesEnabled] 方法可以直接得到定位权限是否开启,如果有对应的权限,我们就可以进行对应的配置信息,否则我们无法进行对应的配置,这时候我们可以弹出一个对话框进行提示用户如何开启定位权限,在我们的项目中因为不需要进行提示,所以没有对应的代码模块。
- (void)viewDidLoad {
[super viewDidLoad];
//配置定位信息
[self configLocation];
}
- (void)configLocation{
self.place = @"";
//判断定位权限是否打开
if ([CLLocationManager locationServicesEnabled]) {
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
//设置寻址精度
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.distanceFilter = 100.0f;
//开始定位
[locationManager startUpdatingLocation];
} else {
//如果定位权限没有打开,可以进行相应的提示
//具体代码省略
}
}
二 代理方法的回调
在前面我们说过了,我们的类需要继承CLLocationManagerDelegate代理,并实现其中的一些方法才能在定位成功/失败时能够正确地调用对应的代理方法。主要用到的代理方法有两个,一个是成功时调用,一个是失败时调用,具体代码如下。在定位失败时,我们首先可以弹框提示定位失败的原因,接着我们可以选择重新定位,或者我们也可以选择限制连续定位失败多少次后就不再进行定位了,具体需要实现的方法大家可以根据需要进行配置和开发。
#pragma mark - CLLocationManagerDelegate
//定位成功的回调,在这里我们配置我们的位置信息
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
[locationManager stopUpdatingLocation];
CLLocation *currentLoc = [locations lastObject];
CLGeocoder *geoCoder = [[CLGeocoder alloc] init];
//利用经纬度进行反编译获取位置信息
[geoCoder reverseGeocodeLocation:currentLoc completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
if (placemarks.count > ) {
//获取当前定位信息
CLPlacemark *placeMark = [placemarks firstObject];
if (placeMark) {
self.place = [NSString stringWithFormat:@"%@%@%@%@",placeMark.administrativeArea,placeMark.locality,placeMark.subLocality,ZYIsNullOrEmpty(placeMark.thoroughfare)?@"":placeMark.thoroughfare];
}
}
}];
} //定位失败时调用
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
[locationManager startUpdatingLocation];
}
iOS学习——自动定位的更多相关文章
- iOS学习——iOS原生实现二维码扫描
最近项目上需要开发扫描二维码进行签到的功能,主要用于开会签到的场景,所以为了避免作弊,我们再开发时只采用直接扫描的方式,并且要屏蔽从相册读取图片,此外还在二维码扫描成功签到时后台会自动上传用户的当前地 ...
- iOS学习-压缩图片(改变图片的宽高)
压缩图片,图片的大小与我们期望的宽高不一致时,我们可以将其处理为我们想要的宽高. 传入想要修改的图片,以及新的尺寸 -(UIImage*)imageWithImage:(UIImage*)image ...
- 【原】iOS学习之事件处理的原理
在iOS学习23之事件处理中,小编详细的介绍了事件处理,在这里小编叙述一下它的相关原理 1.UITouch对象 在触摸事件的处理方法中都会有一个存放着UITouch对象的集合,这个参数有什么用呢? ( ...
- iOS学习笔记——AutoLayout的约束
iOS学习笔记——AutoLayout约束 之前在开发iOS app时一直以为苹果的布局是绝对布局,在IB中拖拉控件运行或者直接使用代码去调整控件都会发上一些不尽人意的结果,后来发现iOS在引入了Au ...
- 【原】iOS学习47之第三方-FMDB
将 CocoaPods 安装后,按照 CocoaPods 的使用说明就可以将 FMDB 第三方集成到工程中,具体请看博客iOS学习46之第三方CocoaPods的安装和使用(通用方法) 1. FMDB ...
- iOS学习路线图
一.iOS学习路线图 二.iOS学习路线图--视频篇 阶 段 学完后目标 知识点 配套学习资源(笔记+源码+PPT) 密码 基础阶段 学习周期:24天 学习后目标: ...
- 黑苹果-IOS学习的开始
深知安装黑苹果的不易,在这里写一下关于我的Thinkpad E430c安装黑苹果教程(Mac版本:Yosemite 10.10.4),希望能够帮助有需要的朋友. 首先贴上我的电脑配置报表: ----- ...
- iOS 学习资源
这份学习资料是为 iOS 初学者所准备的, 旨在帮助 iOS 初学者们快速找到适合自己的学习资料, 节省他们搜索资料的时间, 使他们更好的规划好自己的 iOS 学习路线, 更快的入门, 更准确的定位的 ...
- iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem
http://blog.csdn.net/totogo2010/article/details/7681879 1.UINavigationController导航控制器如何使用 UINavigati ...
随机推荐
- 在linux内核中实现自己的系统调用
如实现一个简单的打印:printk 1.cd linux-ok6410/kernel/ vim printk.cvoid sys_pk(){printk("<0>this is ...
- ansible实践4- 管理配置文件
生产环境中大多时候是需要管理配置文件的,安装软件包只是在初始化环境的时候用一下.下面我们来写个管理nginx配置文件的playbook mkdir -p /etc/ansible/nginx_c ...
- 织梦autoindex应用 dedecms循环中判断第几条数据
arclist 标签下使用 [field:global.autoindex/] 默认从1开始 {dede:arclist row='10' titlelen='48' typeid='1' chann ...
- centos 配置 php 执行shell的权限
在执行特定的shell命令,如 kill,killall 等需要配置root权限 php脚本运行在apache服务器下 可以看到 httpd 是以 apache 用户执行的 看一下 该用户信息 现在 ...
- CentOS命令修改系统时间同步
使用Centos,遇到本地时间对不上,直接敲命令:date -s "2016-01-08 15:15:15"是立即生效了,但是重启后,系统时间还是原来的. 修改了其一是没有办法奏 ...
- Mysql利用存储过程插入400W条数据
CREATE TABLE dept( /*部门表*/ deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*编号*/ dname VARCHAR(20) NO ...
- 算法提高 矩阵乘法 区间DP
这是神题,n <= 1000,如果是极限数据普通的n^3区间DP怎么可能过?可偏偏就过了. 刘汝佳大哥的训练指南上面说的存在nlgn的算法解决矩阵链乘问题,可是百度都找不到.... AC代码 # ...
- 在SpringBoot中配置aop
前言 aop作为spring的一个强大的功能经常被使用,aop的应用场景有很多,但是实际的应用还是需要根据实际的业务来进行实现.这里就以打印日志作为例子,在SpringBoot中配置aop 已经加入我 ...
- ehcache的基本使用及Spring整合
1.ehcache:百度百科这样解释的,EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider.总的来说,他的出现就是减少对数据 ...
- Lua Table转C# Dictionary
因为在游戏公司做web后台开发,经常会涉及到取游戏服务器的数据库里面读写各种操作. 昨天下午,服务器那边让我读一个配置显示到后台,让运营大佬们可以在web后台配置游戏参数. 本来以为很简单个事情,结果 ...