最近有个任务是关于地理位置上的标注开发,经过一些资料的查找和对比,现总结一些经验,给读者也是给自己。

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下的使用的更多相关文章

  1. js架构设计模式——MVVM模式下,ViewModel和View,Model有什么区别

    MVVM模式下,ViewModel和View,Model有什么区别 Model:很简单,就是业务逻辑相关的数据对象,通常从数据库映射而来,我们可以说是与数据库对应的model. View:也很简单,就 ...

  2. ios --xib自定义,解决在导航栏不透明的情况下,自定义xib view高度被压缩64的问题

    在使用xib自定义view的时候,个人习惯性的直接使用xib中的约束,所以自然而然的要打开Autolayout.以前在使用的时候没有发现什么问题,最近项目中使用的时候突然发现在导航栏透明的情况下,出现 ...

  3. Java:concurrent包下面的Map接口框架图(ConcurrentMap接口、ConcurrentHashMap实现类)

    Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合.Java 5之后,增加了Queue体系集合, ...

  4. 读/写锁的实现和应用(高并发状态下的map实现)

    程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁.在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源.但是如果有一个线程想去写这些共享资 ...

  5. Spark优化之一:分布式下的map操作是闭包

    例如对一个JavaPairRDD<String, String>做遍历操作,常见的,我们可以通过先通过collect()操作将它转化为Map对象再进行遍历,也可以使用Spark提供的map ...

  6. 可控制导航下拉方向的jQuery下拉菜单代码

    效果:http://hovertree.com/texiao/nav/1/ 代码如下: <!DOCTYPE html> <html> <head> <meta ...

  7. python中有两个下划线__的是内置方法,一个下划线_或者没有下划线的可能是属性,也可能是方法,也可能是类名

    python中有两个下划线__的是内置方法,一个下划线_或者没有下划线的可能是属性,也可能是方法,也可能是类名,如果在类中定义的就是类的私有成员. >>> dir(__builtin ...

  8. wordpress文章显示同一分类下的上一篇下一篇

    我们在用wordpress开发网站的时候会在文章页中引入上一篇下一篇,但是发现新闻页的上下文章有可能是产品分类的post,这个就不太合理,如何显示同一分类下的上一篇下一篇文章呢?随ytkah一起来看看 ...

  9. 直接修改workspace下的配置文件与tomcat下的文件

    项目中直接修改workspace下的配置文件与tomcat下的文件,可是还有错误,例如修改了4个配置文件中的一个配置文件.经查如下: 直接修改workspace下的配置文件与tomcat下的文件,可能 ...

随机推荐

  1. 使用git将本地文件提交到github存储库

    1.首先你要安装git https://git-for-windows.github.io/ 去官网自行下载对应版本 2.安装好git服务器后,找到你项目的文件夹,右键git bash here打开命 ...

  2. CSS中设置元素的圆角矩形

    圆角矩形介绍 在CSS中通过border-radius属性可以实现元素的圆角矩形. border-radius属性值一共有4个,左上.右上.左下.右下. border-radius属性值规则如下:第一 ...

  3. 看透Spring MVC:源代码分析与实践 (Web开发技术丛书)

    第一篇 网站基础知识 第1章 网站架构及其演变过程2 1.1 软件的三大类型2 1.2 基础的结构并不简单3 1.3 架构演变的起点5 1.4 海量数据的解决方案5 1.4.1 缓存和页面静态化5 1 ...

  4. python中[-1]、[:-1]、[::-1]、[n::-1]使用方法

    import numpy as np a=np.random.rand(5) print(a) [ 0.64061262 0.8451399 0.965673 0.89256687 0.4851874 ...

  5. kafka for centos7

    https://blog.csdn.net/wqh8522/article/details/79163467

  6. Hyper-V虚拟机Redhat添加网卡找不到网卡配置文件解决方法

    环境:Hyper-V虚拟机上面安安装Redhat6.7 问题:系统安装时,只有一块网卡,现根据需要,增加一块网卡,DHCP获取IP地址,在Hyper-V设置中增加网卡后,存在连个问题:1./etc/s ...

  7. react中 如何使用图片

    //render 第一种方法:先const一个对象,把需要应用图片的dom上的style写入对象中, 然后在return()中使用style关键字赋值为预先定义的那个style对象 const bgG ...

  8. 西门子PLC在自动浇灌系统中的应用

    西门子PLC在自动浇灌系统中的应用(鸿控整理) 2020-02-07 22:50:48 1 自动浇灌系统简介 系统采用自行研制的湿度传感器监测土壤的湿度情况,当土壤湿度低于所要求的值后,自动开启水泵电 ...

  9. 项目架构级别规约框架Archunit调研

    背景 最近在做一个新项目的时候引入了一个架构方面的需求,就是需要检查项目的编码规范.模块分类规范.类依赖规范等,刚好接触到,正好做个调研. 很多时候,我们会制定项目的规范,例如: 硬性规定项目包结构中 ...

  10. 小程序图片 mode 设置为 widthFix 图片显示瞬间竖向拉伸变形闪烁

    官方文档中 mode="widthFix"   宽度不变,高度自动变化,保持原图宽高比不变,即设置图片宽度而高度自适应. 但是在实际开发中发现图片在初始加载时瞬间竖向拉伸变形闪烁然 ...