Corelocation及地图控件学习笔记
Corelocation基本使用
在地图章节的学习中,首先要学的便是用户位置定位,因此我们首先要掌握Corelocation的使用。(在IOS8以前可以系统会直接请求授权,现在需要我们自己调用方式通知系统请求授权)
首先设置一个Corelocation属性并实现懒加载设置代理,此对象需要自己调用方法startUpdatingLocation及stopUpdatingLocation来开始和结束位置获取
- //定位管理者
- @property (nonatomic , strong ) CLLocationManager *manager;
- - (CLLocationManager *)manager{
- if (_manager == nil) {
- //创建CoreLocation管理者
- _manager = [[CLLocationManager alloc] init];
7 _manager.delegate = self;- 8 }
- 9 return _manager;
- 10 }
设置好定位管理者对象后就对其属性进行一些常用的属性配置
- //配置定位精度
- /*
- 导航级别: kCLLocationAccuracyBestForNavigation;
- 最优: kCLLocationAccuracyBest;
- 精确到10米: kCLLocationAccuracyNearestTenMeters;
- 精确到100米: kCLLocationAccuracyHundredMeters;
- 精确到1000米: kCLLocationAccuracyKilometer;
- 精确到3000米: kCLLocationAccuracyThreeKilometers;
- */
- self.manager.desiredAccuracy = kCLLocationAccuracyBest;
- //设置超过范围后更新数据,如不设置数据会一直不间断更新
- self.manager.distanceFilter = ;
若使用[self.manager requestAlwaysAuthorization]方法需要添加NSLocationAlwaysUsageDescription为key
- //判断系统IOS版本
- if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
- NSLog(@"IOS8");
- //注意:IOS8后需要验证授权,在Info.plist文件还要加上NSLocationWhenInUseUsageDescription这个key,Value可以为空,并调用此方法
- [self.manager requestWhenInUseAuthorization];
- [self.manager startUpdatingLocation];
- }else{
- NSLog(@"IOS7");
- //开始获取用户位置
- [self.manager startUpdatingLocation];
- }
接下来便需要实现一些代理方法来方便我们获取用户位置,以下为常用的部分代理协议
1.用户授权状态改变后调用
- //在此判断授权状态并进行相对应的操作
- - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{
- if (status == kCLAuthorizationStatusAuthorizedAlways ||
- status == kCLAuthorizationStatusAuthorizedWhenInUse) {
- NSLog(@"授权成功");
- //授权成功后开始监听 获取位置
- [self.manager startUpdatingLocation];
- }
- }
2.在更新用户位置时调用的方法
- //可以在这里进行反地理编码获取位置信息
- - (void)locationManager:(CLLocationManager *)managerdidUpdateLocations:(NSArray *)locations{
- //反地理编码使用位置信息反编码
- CLGeocoder *geocoder = [[CLGeocoder alloc] init];
- CLLocation *newLocation = [locations lastObject];
- [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
- for (CLPlacemark *place in placemarks) {
- //通过CLPlacemark可以输出用户位置信息
- NSLog(@"%@ %@ %lf %lf",place.name, place.addressDictionary, place.location.coordinate.latitude,place.location.coordinate.longitude);
- }
- }];
- }
3.用户手机头部方向改变时调用的方法
- //在更新用户头部方向时调用,适用方向指定操作
- - (void)locationManager:(CLLocationManager *)managerdidUpdateHeading:(CLHeading *)newHeading
至此Corelocation的配置就已完成,接下来是关于地图配置的方法
地图控件的基本使用
首先要导入地图框架 #import <MapKit/MapKit.h>
设置地图控件属性,并懒加载实现及其属性配置
- //地图控件,其中region属性个人觉得在代理中设置比较合适
- @property (nonatomic, strong) MKMapView *mapView;
- - (MKMapView *)mapView{
- if (_mapView == nil) {
- _mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
- _mapView.delegate = self;
- /*
- MKUserTrackingModeNone = 0 默认不跟踪
- MKUserTrackingModeFollow, 追踪位置
- MKUserTrackingModeFollowWithHeading 追踪位置及其头部指向
- */
- //用户追踪模型,如不设置将无法追踪用户
- _mapView.userTrackingMode = MKUserTrackingModeFollowWithHeading;
- /*
- MKMapTypeStandard = 0,普通模式(默认模式)
- MKMapTypeSatellite, 卫星模式
- MKMapTypeHybrid 混合模式
- */
- _mapView.mapType = MKMapTypeStandard;
- }
- return _mapView;
- }
最后将_mapView添加进self.view中,整个地图相当于就可以加载完成了。下面介绍MKMapView的一部分代理方法及其调用时机
- #pragma mark - MKMapViewDelegate 代理方法
- /**
- * 更新用户位置是调用
- *
- * @param mapView 题图
- * @param userLocation 用户位置
- */
- - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
- NSLog(@"更新用户位置");
- //设置用户位置中心点
- [self.mapView setCenterCoordinate:userLocation.coordinate animated:YES];
- //范围设置MKCoordinateSpanMake中的代表经纬度范围
- MKCoordinateRegion region = MKCoordinateRegionMake(userLocation.coordinate, MKCoordinateSpanMake(0.1, 0.1));
- //设置中心点范围
- [self.mapView setRegion:region animated:YES];
- }
- /**
- * 地图将要开始渲染时调用
- */
- - (void)mapViewWillStartRenderingMap:(MKMapView *)mapView{
- NSLog(@"%s",__func__);
- }
- /**
- * 地图完成渲染时调用
- */
- - (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered{
- NSLog(@"%s",__func__);
- }
- /**
- * region(范围)即将改变时调用
- */
- - (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated{
- NSLog(@"%s",__func__);
- }
- /**
- * region(范围)完成改变时调用
- */
- - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{
- NSLog(@"%s",__func__);
- }
- /**
- * 追踪模型改变时调用
- */
- - (void)mapView:(MKMapView *)mapView didChangeUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated{
- NSLog(@"%s",__func__);
- }
- /**
- * 设置大头针时调用 类似于tableViewCell设置
- */
- - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{
51 //在其中设置MKAnnotationVIew,有重用机制
52}
另外还有其他一些代理方法就不一一介绍了,剩下的就看需要 在对应的方法里添加想进行的操作。
Corelocation及地图控件学习笔记的更多相关文章
- 转)delphi chrome cef3 控件学习笔记 (二)
(转)delphi chrome cef3 控件学习笔记 (二) https://blog.csdn.net/risesoft2012/article/details/51260832 原创 2016 ...
- Winform控件学习笔记【第二天】——常用控件
背景:期末考试刚过就感冒了,嗓子火辣辣的,好难受.但是一想起要学习总结就打起精神来了,Winform控件网上也没有多少使用教程,大部分都是自己在网上零零散散的学的,大部分用的熟了,不总结会很容易忘得. ...
- WinForm控件学习笔记【第一天】——Control类
感悟:明天就又是学校双选会的日子了.两年我都参与了学校的双选会的服务工作,现在该是双选会服务的我时候了.怎么样找到一份好的工作,或者说怎么样学习才能符合企业对人才的要求,我现在也是很迷茫.平时都是在看 ...
- dev控件学习笔记之----CxGrid
本人总结的DEV学习:希望对大家有所帮助. 一.是否显示分组工具: 二.表格左边记录信息显示的宽度: 三.设置表格行高: 四.表头文件的水平和垂直设置:多个设置用按住SHIFT后进行多选,然后就可以设 ...
- web前端开发控件学习笔记之jqgrid+ztree+echarts
版权声明:本文为博主原创文章,转载请注明出处. 作为web前端初学者,今天要记录的是三个控件的使用心得,分别是表格控件jqgrid,树形控件ztree,图表控件echarts.下边分别进行描述. ...
- DataGridView控件-学习笔记总结
1.GridColor属性用来获取或设置网格线的颜色 dataGridView1.GridColor=Color.Blue; 2.设置宽度 .高度 dataGridView1.Columns[].Wi ...
- C# WinForm调用UnityWebPlayer Control控件 <学习笔记1>
工具 1.三维场景 Unity 5.0.2f1 2.开发环境Microsoft Visual Studio 2010 3.需要使用的控件 UnityWebPlayer Control 出现的问题及解决 ...
- Winform控件学习笔记【第六天】——TreeView
TreeView控件用来显示信息的分级视图,如同Windows里的资源管理器的目录.TreeView控件中的各项信息都有一个与之相关的Node对象.TreeView显示Node对象的分层目录结构,每个 ...
- Winform控件学习笔记【第五天】——ListView
[第五天] 常用的基本属性: FullRowSelect:设置是否行选择模式.(默认为false) 提示:只有在Details视图该属性才有意义. GridLines:设置行和列之间是否显示网格线.( ...
随机推荐
- PHP编写的图片验证码类文件分享方法
适用于自定义的验证码类! <?php/* * To change this license header, choose License Headers in Project Propertie ...
- Android动画的使用总结
1.补间动画(透明渐变.平移.旋转.缩放.组合) 方法一:通过xml文件设置 1-1:创建:res/anim 1-2:java代码写调用 Animation a = AnimationUtils.lo ...
- HDU 4709:Herding
Herding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- A Knight's Journey 分类: POJ 搜索 2015-08-08 07:32 2人阅读 评论(0) 收藏
A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 35564 Accepted: 12119 ...
- Squares 分类: POJ 2015-08-04 11:46 3人阅读 评论(0) 收藏
Squares Time Limit: 3500MS Memory Limit: 65536K Total Submissions: 17462 Accepted: 6634 Description ...
- 实现LUT
//实现LUT 查找表 #include "stdafx.h" #include <iostream> #include <opencv2/opencv.hpp& ...
- 手把手教你修改iOS版QQ的运动步数
手把手教你修改iOS版QQ的运动步数 现在很多软件都加上了运动模块,比如QQ和微信,而且还有排行榜,可以和好友比较谁的运动步数多,任何东西只要添加了比较功能,就变得不一样了.今天教大家用代码去修改QQ ...
- torch基本操作
1.在terminal中th进入troch,th+文件名.lua运行文件.进入torch之后,dofile+"文件名.lua"运行文件
- 干净的卸载Oracle
一.在oracle11G以前卸载oracle会存在卸载不干净,导致再次安装失败的情况,在运行services.msc打开服务,停止Oracle的所有服务. 二. oracle11G自带一个卸载批处理\ ...
- NSIS学习记录の----win8.1和win10对于NSIS创建的卸载快捷方式无法在开始目录下显示
NSIS提供了很好的软件卸载功能编写的方法,但是针对win8.1和win10操作系统,由于开始目录的权限限制,我们有时候并不能完美的完成所需要的功能----卸载程序的快捷方式不能显示.话不多说,下面提 ...