iOS9下的Map Kit View下的使用
最近有个任务是关于地理位置上的标注开发,经过一些资料的查找和对比,现总结一些经验,给读者也是给自己。
iOS9下的Map Kit View实际是以前MapKit,只不过换了一个名字,实际是指同一个UI控件,当然Map Kit View在经过几代的发展,已经有不少新功能,为了节省时间,从storyboard上开发。
之后在设置的General上的Link Framework and Libraries添加MapKit.framework和CoreLocation.framework,iOS8之后的MapKit开发都需要添加CoreLocation.framework,因为apple对用户隐私作出了保护,需要适配才可使用MapKit
UI的布局如上图所示,一个Map Kit View和UIButton
在文件结构上,首先创建一个类MyAnnotation,继承自NSObject,因为大头针是由MKAnnotation控制的,所以也需要在后面加一个协议<MKAnnotation>,按住Command点击进去,会发现一个必须用的属性,还有两个可选的属性,不要忘记import MapKit头部
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h> @interface MyAnnotation : NSObject <MKAnnotation> @property (nonatomic, assign) CLLocationCoordinate2D coordinate; @property (nonatomic, copy) NSString *title; @property (nonatomic, copy) NSString *subtitle; @end
.m文件闲置即可
让我们回到ViewController.m上
导入MapKit和CoreLocation、MyAnnotation文件,加上MapKitViewDelegate和CLLocationManagerDelegate协议,将storyboard上的Map Kit View拖拉到该文件上,同时UIButton也绑定Action方法,最后,需要创建CLLocationManager成员变量,为的是能在iOS8之后能使用地理位置,代码如下:
#import "ViewController.h"
#import "MyAnnotation.h"
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h> @interface ViewController () <MKMapViewDelegate , CLLocationManagerDelegate> @property (weak, nonatomic) IBOutlet MKMapView *mapView; - (IBAction)addAnnotation; @property (nonatomic ,strong) CLLocationManager *manager;
之后添加各种代理方法,使得大头针能在地图上显示
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
iOS8之后,Apple的策略改变,获取地址需要经过用户允许
info.plist的操作网上很多教程,要引出地址使用,需要做判断,代码如下:
CLLocationManager *manager = [[CLLocationManager alloc] init];
_manager = manager;
if ([CLLocationManager locationServicesEnabled]) {
_manager.desiredAccuracy = kCLLocationAccuracyBest;
_manager.distanceFilter = ;
_manager.delegate = self;
if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
[self.manager requestAlwaysAuthorization];
} else {
[self.manager startUpdatingLocation];
}
}
之后下面的方法才生效,不然看不到自己目前的位置
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
一般这样设置后,Map Kit View已经能使用,更多高级的用法等我的项目完成后和大家分享,并如何避免入坑。
iOS9下的Map Kit View下的使用的更多相关文章
- js架构设计模式——MVVM模式下,ViewModel和View,Model有什么区别
MVVM模式下,ViewModel和View,Model有什么区别 Model:很简单,就是业务逻辑相关的数据对象,通常从数据库映射而来,我们可以说是与数据库对应的model. View:也很简单,就 ...
- ios --xib自定义,解决在导航栏不透明的情况下,自定义xib view高度被压缩64的问题
在使用xib自定义view的时候,个人习惯性的直接使用xib中的约束,所以自然而然的要打开Autolayout.以前在使用的时候没有发现什么问题,最近项目中使用的时候突然发现在导航栏透明的情况下,出现 ...
- Java:concurrent包下面的Map接口框架图(ConcurrentMap接口、ConcurrentHashMap实现类)
Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合.Java 5之后,增加了Queue体系集合, ...
- 读/写锁的实现和应用(高并发状态下的map实现)
程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁.在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源.但是如果有一个线程想去写这些共享资 ...
- Spark优化之一:分布式下的map操作是闭包
例如对一个JavaPairRDD<String, String>做遍历操作,常见的,我们可以通过先通过collect()操作将它转化为Map对象再进行遍历,也可以使用Spark提供的map ...
- 可控制导航下拉方向的jQuery下拉菜单代码
效果:http://hovertree.com/texiao/nav/1/ 代码如下: <!DOCTYPE html> <html> <head> <meta ...
- python中有两个下划线__的是内置方法,一个下划线_或者没有下划线的可能是属性,也可能是方法,也可能是类名
python中有两个下划线__的是内置方法,一个下划线_或者没有下划线的可能是属性,也可能是方法,也可能是类名,如果在类中定义的就是类的私有成员. >>> dir(__builtin ...
- wordpress文章显示同一分类下的上一篇下一篇
我们在用wordpress开发网站的时候会在文章页中引入上一篇下一篇,但是发现新闻页的上下文章有可能是产品分类的post,这个就不太合理,如何显示同一分类下的上一篇下一篇文章呢?随ytkah一起来看看 ...
- 直接修改workspace下的配置文件与tomcat下的文件
项目中直接修改workspace下的配置文件与tomcat下的文件,可是还有错误,例如修改了4个配置文件中的一个配置文件.经查如下: 直接修改workspace下的配置文件与tomcat下的文件,可能 ...
随机推荐
- 全网最详细!Centos7.X 搭建Grafana+Jmeter+Influxdb 性能实时监控平台
背景 日常工作中,经常会用到Jmeter去压测,毕竟LR还要钱(@¥&*...),而最常用的接口压力测试,我们都是通过聚合报告去查看压测结果的,然鹅聚合报告的真的是丑到家了,作为程序猿这当然不 ...
- python常用内置模块-random模块
random模块:用于生成随机数 '''关于数据类型序列相关,参照https://www.cnblogs.com/yyds/p/6123692.html''' random() 随机获取0 到1 之间 ...
- L1和L2:损失函数和正则化
作为损失函数 L1范数损失函数 L1范数损失函数,也被称之为最小绝对值误差.总的来说,它把目标值$Y_i$与估计值$f(x_i)$的绝对差值的总和最小化. $$S=\sum_{i=1}^n|Y_i-f ...
- Qt Installer Framework翻译(7-5)
操作 这些操作由组件和控制脚本准备,并由安装程序执行. 注意:操作是通过线程执行的. 在内部,每个操作都有一个DO步骤,包含有关安装程序的说明,以及一个UNDO步骤,包含有关卸载程序的说明. 操作总结 ...
- Shell字符串比较相等、不相等方法小结【转】
#!/bin/sh #测试各种字符串比较操作. #shell中对变量的值添加单引号,爽引号和不添加的区别:对类型来说是无关的,即不是添加了引号就变成了字符串类型, #单引号不对相关量进行替换,如不对$ ...
- ImportError: Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.
用了pip install pydot; pip install graphviz都不行 去网上查了才发现window下要去https://graphviz.gitlab.io/下载windows版本 ...
- C语言入门:一维数组的概要
数组的概念: 具有相同数据的有序集合 一维数组的定义格式: int a[5]; 类型说明符 数组名(标识符)[常量表达式(长度)]; 一维数组下标 : 数组的下标 从0开始 最大下标值 为 数组的 ...
- 解决虚拟机中Linux不能上网的问题
第一步.虚拟机中的设置 点击右上角的网络标识,点击network settings,选择Wired,Add Profile,IPv4,Addresses设置成Automatic(DHCP),完成设置点 ...
- 获取PHP类的所有属性和所有方法,可通过反射机制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <?php class Class1{ public $var1 = 'v ...
- springIOC源码接口分析(四):MessageSource
一 定义方法 MessageSource接口用于支持信息的国际化和包含参数的信息的替换 这个接口定义了三个方法: public interface MessageSource { /** * 解析co ...