关于iOS开发首次进入需要获取地理位置
今天给大家简单介绍一下iOS开发过程中会遇到的获取地理位置的问题,(话不多说进入正题)这里给大家讲解一下两种在APPdelegate获取地理位置的方法:
一:首先是用系统的方法获取地理位置:
1、 首先在AppDelegate.m导入
@import CoreLocation;
@import MapKit;
2、 声明协议:
<CLLocationManagerDelegate> //协议
3、声明属性:
@property(nonatomic) CLLocationManager *locationManager;
4、
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.locationManager = [[CLLocationManager alloc] init];
//判断异常
if (![CLLocationManager locationServicesEnabled]) {
NSLog(@"定位服务不可用!");
}
//定位精度
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.delegate = self;
//启动定位
[_locationManager startUpdatingLocation];
....
return YES;
}
5、完成地图的代理方法:
#pragma mark -- CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray<CLLocation *> *)locations {
static BOOL isLocation = NO;
//地理位置逆编码
[self veverseGeLocation:manager.location completion:^(BOOL sucess, id content) {
if (sucess) {
//这里打印一下数据,方便查看
NSLog(@"%@",content);
//NSString * provnice = content[@"State"];
//NSString * city = content[@"City"];
//NSString * district = content[@"SubLocality"];
if (isLocation == YES) {
return ;
}
//如果你其他界面需要用到该地理位置;则直接将NSString 内容保存下来,需要在取出来
isLocation = YES;
[self.locationManager stopUpdatingLocation];
}else{
}
}];
//停止定位
[manager stopUpdatingLocation];
}
//地理位置逆编码:把经纬度信息编码成格式化的地理位置信息
- (void)veverseGeLocation:(CLLocation *)location completion:(void(^)(BOOL sucess, id content)) completion{
CLGeocoder *coder = [[CLGeocoder alloc]init];
//逆编码方法,后台线程执行
[coder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
BOOL sucess;
id content = nil ;
if (error) {
sucess = NO;
content = error.localizedDescription;
}
else{
sucess = YES;
CLPlacemark *placeMark = placemarks.firstObject;
content = placeMark.addressDictionary;
}
completion(sucess,content);
}];
}
二:首先是用高德的方法获取地理位置:用高德地图的话首先需要添加开发地图需要用到的库:对于库的导入依据开发人员的实际需求而定进行cocoapods导入或者手动拖入,前面流程基本都是跟随高德地图api 进行的,再次就不多重复介绍,详情各位可自行前往学习(链接:http://lbs.amap.com/api/ios-sdk/guide/create-project,下面就APPdelegate的内容进行讲解:
1、导入对应的头文件:
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapLocationKit/AMapLocationKit.h>
2、添加协议:
<AMapLocationManagerDelegate> //协议
3、声明属性:
@property (nonatomic,strong)AMapLocationManager * locationManager;
4、
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[AMapServices sharedServices].apiKey = @"您的key";
[[AMapServices sharedServices] setEnableHTTPS:YES];
//创建地图manager
self.locationManager = [[AMapLocationManager alloc] init];//实例化位置管理器
[self.locationManager setDelegate:self];
[self.locationManager startUpdatingLocation];//启动定位
[self.locationManager setPausesLocationUpdatesAutomatically:NO];
[self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];//定位精度
self.locationManager.locatingWithReGeocode = YES;//连续定位是否返回逆地理信息,默认NO。
return YES;
}
5、代理方法:
#pragma mark - AMapLocationManager Delegate
- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location reGeocode:(AMapLocationReGeocode *)reGeocode
{
NSLog(@"location:{lat:%f; lon:%f; accuracy:%f}", location.coordinate.latitude, location.coordinate.longitude, location.horizontalAccuracy);
static BOOL isLocation = NO;
if (reGeocode != nil && isLocation == NO) {
// NSString * provnice = reGeocode.province;
// NSString * city = reGeocode.city;
// NSString * district = reGeocode.district;
// NSString *codeStr = reGeocode.adcode;//地理adcode
//如果你其他界面需要用到该地理位置;则直接将NSString 内容保存下来,需要在取出来
isLocation = YES;
}
}
以上就是两者获取地理位置的方法,需要说明的是:如果开发项目中后面会用到地理位置的adcode的时候,本人建议用第二种方法,因为第一种目前不能获取到该adcode,或者本人技术不到位还没有找到解决的办法,望各位大神多多谅解和给出指导意见,谢谢!
关于iOS开发首次进入需要获取地理位置的更多相关文章
- iOS开发之网络编程--获取文件的MIMEType
前言:有时候我们需要获取文件的MIMEType的信息,下面就介绍关于获取MIMEType的方法. 1.直接百度搜索关键字"MIMEType",你会找到,然后查吧: 2.用代码获取文 ...
- 【iOS开发-从网络上获取图片尺寸】
实际开发过程中,容易碰到从网络上获取图片尺寸的场景,比如一个UIImageView要装载从网络上获取的图片,但要先设置其frame,此时又不知道图片尺寸,就要从网络上获取尺寸了.为了最好的用户体验,一 ...
- iOS开发 首次启动显示用户引导,第二次启动直接进入App,UIScrollView,UIPageControl,NSUserDefaults
首先创建一个引导图的控制器类 UserGuideViewController.h和UserGuideViewController.m #import <UIKit/UIKit.h> #im ...
- ios开发之-- tableview/collectionview获取当前点击的cell
方法如下: 一般collectionView 或者 tableview都有自带的点击函数,如下: , collectionView -(void)collectionView:(UICollectio ...
- IOS开发代码分享之获取启动画面图片的string
http://www.jb51.net/article/55309.htm 本代码支持 iPhone 6 以下. 支持 iPhone 及 iPad ? 1 2 3 4 5 6 7 8 9 10 11 ...
- 文顶顶iOS开发博客链接整理及部分项目源代码下载
文顶顶iOS开发博客链接整理及部分项目源代码下载 网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程 ...
- iOS 开发获取唯一标识
在做流量精灵的时候有这样一个需求,帐户默认需要取手机的imsi 信息.这就有一个好处,即便用户删除我们的应用后从新下载,下次进入时他们还会以同样的身份登陆,并且获得原先纪录.这样不仅对于开发公司人员来 ...
- iOS开发中获取WiFi相关信息
iOS 开发中难免会遇到很多与网络方面的判断,这里做个汇总,大多可能是与WiFi相关的. 1.Ping域名.Ping某IP 有 时候可能会遇到ping 某个域名或者ip通不通,再做下一步操作.这里的p ...
- iOS开发——运行时OC篇&使用运行时获取系统的属性:使用自己的手势修改系统自带的手势
使用运行时获取系统的属性:使用自己的手势修改系统自带的手势 有的时候我需要实现一个功能,但是没有想到很好的方法或者想到了方法只是那个方法实现起来太麻烦,一或者确实为了装逼,我们就会想到iOS开发中最牛 ...
随机推荐
- Mac OSX Sierra WiFi connecting problem
吐槽一下,苹果的质量管控越来越差了. Mac OSX Sierra有时突然或升级后会遇到wifi不停重连连不上问题,现象为不停地连接wifi. 网上有人说删除 /Library/Preferences ...
- react学习总结
http://www.runoob.com/react/react-tutorial.html一般先看一些中文的简单的介绍和一些基本概念http://reactjs.cn/react/docs/get ...
- 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐
1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 432 Solved: 270[ ...
- canvas的beginPath和closePath分析总结,包括多段弧的情况
参考博文: Html5 canvas画图教程17:论beginPath的重要性 先看两个例子 例1: <canvas id="myCanvas" width="30 ...
- adt的问题An internal error has occurred. After scene creation, #init() must be called
这个问题困扰了我好久,我也尝试去百度.google无济于事啊,让我寝食难安,太难受了,我把它贴出来,希望后人不绕弯子... 解决办法: 即可,解决这一个问题,现在酣畅淋漓,挥洒自如的capy代码了
- android:layout_gravity和android:gravity属性的区别1
一.介绍: gravity的中文意思就是"重心",就是表示view横向和纵向的停靠位置 (1).android:gravity:是对view控件本身来说的,是用来设置view本身的 ...
- 用 Visual Studio Code 调试 Node.js
环境: Visual Studio Code Node.js 1. 关闭运行中的程序 2.打开入口文件,我这里的入口文件为 app.js 3.点击左侧菜单栏的 debug 按钮 4.点击运行按钮 5 ...
- Android Weekly Notes Issue #249
Android Weekly Issue #249 March 19th, 2017 Android Weekly Issue #249 本期内容包括: 一个设计的实现Demo讨论; Kotlin的C ...
- iOSiOS开发之数据存储之NSKeyedArchiver
1.概述 NSKeyedArchiver归档和plist文件存储不同的是NSKeyedArchiver可以直接保存对象.如果对象是NSString.NSDictionary.NSArray.NSDat ...
- mysql技术内幕InnoDB存储引擎-阅读笔记
mysql技术内幕InnoDB存储引擎这本书断断续续看了近10天左右,应该说作者有比较丰富的开发水平,在源码级别上分析的比较透彻.如果结合高可用mysql和高性能mysql来看或许效果会更好,可惜书太 ...