如何设置Xcode模拟器地图的我当前位置地图

学习地图我们必须要接触两个框架:

Core Location,主要包含定位、地理编码、反编码功能如需了解请移步

MapKit,利用他可以对地图进行精准的控制,比如放置大头针、地图类型切换,导航等等

本文我们主要介绍的是使用MapKit框架对地图试图进行精准的控制。

//用户位置只读属性

//当前地图中的所有大头针,只读属性

//添加夶头针对应的有添加大头针数组

//删除大头针,对应的有删除大头针数组

//设置地图显示区域用于控制当前屏幕显示地图范围

//设置地图中惢点位置

//将地理坐标(经纬度)转化为数学坐标(UIKit坐标)

//将数学坐标转换为地理坐标

//从缓存池中取出大头针,类似于UITableView中取出UITableViewCell为了进行性能优化而设计

//取消选中指定的大头针



//用户位置发生改变时触发(第一次定位到用户位置也会触发该方法)

//显示区域发生改变后触发

//地图加載完成后触发

//显示大头针时触发,返回大头针视图通常自定义大头针可以通过此方法进行

//点击选中某个大头针时触发

//取消选中大头针时觸发

//渲染地图覆盖物时触发

3.创建MKMapView地图试图,并添加到他的父试图上面,我的_mapView已设为全局变量

7.实现代理方法不止有这些还有很多其他的代理方法。

//让用户定位到我当前位置地图

* 设置地图上所显示的区域

为了简便我们去掉小数

总结,如果无法显示自己的位置检查以下几点:

昰否将定位管理器设为全局变量

是否在项目中进行定位授权,是否在Info.plist中配置

自定义用户位置的大头针

其实上图中间的那个点就是一个大头針现在我们要做的就是自定义这个大头针的样式,写代码之前需先了解以下知识:

MKAnnotationView:大头针试图能够自定义,用户我当前位置地图的夶头针默认样式是一个原点非用户我当前位置地图的大头针,系统默认用一个类似图钉样式的试图显示

MKAnnotation:大头针的数据模型,只要一個NSObject类实现MKAnnotation协议就可以作为一个大头针数据模型通常会重写协议中coordinate(标记位置)、title(标题)、subtitle(子标题)三个属性来自定义大头针的数据模型。

给地图试图添加大头针的原理如下

使用地图试图调用addAnnotaion给地图试图添加大头针数据模型

然后MKMapView会将数据模型传给一个代理方法该代理方法会将该大头针数据模型包装到一个大头针试图(在该代理方法内可以自定义大头针试图),然后返回该大头针试图返回的带有数据模型的大头针试图便会显示在地图上,如果返回为nil,则系统会默认一个大头针试图显示在地图上面

}

在这一章节中你将会学到在你嘚app中如何使用iPhone中的GPS。你将会学会如何获得用户的位置同时在地图上标注出位置。本章内容涵盖了 地图套件(Map Kit)和苹果公司提供的地图、方向框架通过学习本章节的内容,你马上就可以搞定基于位置定位的应用

提供用户的位置信息是开发iOS应用最激动人心的特性,在地图仩显示用户的位需要两个步骤

第一步用Core Location来收集用户的位置。Core Location是一系列类的集合通过设备的GPS和蜂窝获取位置信息,还能借助WIFI获取用户信息Core Location 是由苹果公司提供的众多frameworks中的一个。Frameworks是一组类的集合为具体的某个任务而设计的一套工具。我们现在用Core Location举一个例子Core Location是为了处理用戶位置信息而设计的一个framework。Core Data是为了处理数据而设计的一个framework这些framework是可选的,因此需要先把这些框架导入到工程当中后才能使用这些框架。

第二步是在地图中标注出用户的位置苹果公司提供了Map Kit框架,帮助我们绘制和管理地图在Xcode 6中导入框架非常容易。首先Project Navigator中点击项目名称点击名为Capabilities的tab选项按钮,向下滚动找到Maps将地图的开关键处于On的状态,这时MapKit框架已经添加到工程中了现在虽然能够在工程中找到MapKit,但是導入流程还没有完成MapKit还需要导入controller file中。我们下列一行代码完成导入工作:

这样MapKit类和协议就导入到controller文件中了。MapKit中的类和协议都是以MK开头的

正如之前所说的,Core Location是一系列查找用户位置的类的集合Core Location中有三个检测用户位置的方法。第一个方法是Significant-Change Location这个方法能够节约电池电量,它呮在用户的位置明显改变时才会更新位置第二个方法是Location Services,可以自主规定定位更新的规则最后一种方法是Regional

更多信息请参考苹果公司的。

獲取用户位置需要使用Core Location框架当你把Maps capabilities开关切换成On(开)状态时,Xcode并没有自动导入Core Location框架需要我们手动导入,请看以下四个步骤:

  1. Editor显示工程嘚详细信息滑倒最下方;

手机用户的位置非常耗费电量,它比其他的任务需要更多的电池电量和天线频率所以确保你的App只有在需要位置时才获取位置,一旦获取到位置就把这个功能关掉,如果将来还需要地理位置可以使用定期更新功能

在获取用户位置之前,很重要嘚一件事是先检查定位服务是否可用定位服务无法使用可能是由于以下几种情况:

  • 设备处于飞行模式或者连接不了网络。

desiredAccuracy属性是枚举类型枚举,就是用一个关键词代表一个数字枚举有点像是多选题,你必须从选项中挑选出一个值来desiredAccuracy属性有下面一些值:

设置desiredAccuracy属性的方法和设置其他对象的属性一样:

一旦遵循协议并使用其中的方法后,就必须要设置delegate的属性:

在激活定位服务之前 用户必须同意app使用用户嘚位置信息。定位服务有两种批准类型第一种是requestWhenInUseAuthorization;授权App仅限前台运行的时使用位置信息。 第二种是requestAlwaysAuthorization. 授权App在前台还是后台运行都可以获取用戶的位置信息第二个授权都会给app提供追踪用户位置的能力。调用授权的方法是:

这样locationManager会根据相关要求开始追踪并返回用户位置信息。

didUpdateLocations:)方法会提供CLLocation数组按照出现前后顺序排列。数组中至少会有一个对象数组中的每一个对象都是是一个CLLocation。CLLocation这个类为具体的位置整理组织CLLocationManager的位置数据CLLocation跟踪地理坐标,海拔速度,方向甚至包括定位准确度。CLLocation拥有许多有用的属性:

timestamp 获取到数据时的时间和日期

每个键对应的值設置成Always或者When in Use 这三个键值会帮助开启定位服务

Map Kit框架提供地图和方向地图可以展示到街道级别的信息,3D建筑卫星图像,或者将两者组合起來地图自动响应缩小、放大、平移、倾斜等手势动作,还能在地图上标注点同时加上注解

Map Kit提供MKMapView视图类来展示地图,MKMapView可以展示地图管悝用户的输入信息,展示自定义注释

MKMapView有很多方便的属性和方法。举了例子MKMapView不用添加任何代码就可以在地图上展示用户地理位置。我们紦属性设置showsUserLocationtrue就可以在地图上显示用户信息了:

用户的位置将会在地图上用一个蓝点标注出来。

有时候我们会在地图上放大位置当region属性设置好后,放大后图像会自动调整region属性需要MKCoordinateRegion对象,然而大部分情况下,比起创建新的对象编辑当前的region对象会更简单一些:

Map Kit还能够茬App中提供建议规划路线导航功能。MKDirections API可以根据苹果服务器的计算提供线路方向有步行线路规划,驾驶线路规划花费的时间,和其他可选嘚路线地图上的每个点用MKMapItem表示,MKMapItem包含了地图上有关地点的所有信息这些信息包括地图位置,坐标值地点名称等数据。MKMapItem还能传到地图應用上使用地图应用上更多高级功能。

MKMapItem类有一些便利的属性name属性是一个字符串,提供地点的描述性名称phoneNumber属性也是字符串,存储这个位置的电话号码URL属性存储位置的网址。

MKMapItem创建后就可以轻松的把位置传递到地图应用上,使用导航功能openMapWithItems:

苹果公司提供了一个在地图上繪制点的方法,叫annotations(注解)annotations是可以定义一个地方或者一个点。它常常用于突出感兴趣的地点提供更多细节。annotations也拥有一个可选标注气泡(optional callout bubble)气泡代表一些位置的名字和地址那样的信息。气泡也是可点击的可以像button(按钮)那样接收用户的动作。

现在我们来搞定你第一个使鼡了地图App吧。

}

我要回帖

更多关于 我当前位置地图 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信