搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > iOS笔记 > iOS 9 学习系列:MapKit Transit

iOS 9 学习系列:MapKit Transit

iOS笔记 2017-10-30

MapKit 的每次迭代都会为开发者带来一些新的特性,iOS 9的更新也不例外。在本文中,我们将预览一些新的API。我们将在一个应用中使用它们,给大家展示一下如何通过程序来估算(货物的)运达时间。


Notable New API


MapKit View Improvements


现在你可以在地图控件上,指定更多的高级的布局和标注方式。MKAnnotation 现在拥有了如下可以自定义的属性。


  • Title

  • Subtitle

  • Right Accessory View

  • Left Accessory View

  • Detail Callout Accessory View


Detail Callout Accessory View 是 iOS 9 中新增的,允许你自定义 detail accessory view,他支持auto layout 和 constraints。非常方便你自定义一个已经存在的标注。


另外,MKMapView 中也增加了一些新的、自解释的属性。如下:


  • showsTraffic

  • showsScale

  • showsCompass

  • Transit Improvements


Transit Improvements


在 iOS 9 中新介绍了 MKDirectionsTransportType。目前为止,也是唯一个能用于获取 ETA 请求的类。当你使用 calculateETAWithCompletionHandler 方法发起一个 ETA request后,可以得到一个 MKETAResponse 对象,包括了诸如运送时间、距离、预计到达时间、预计出发时间等数据。


Building a Sample App


为了演示这些 API,我们创建如下一个 App。这个 Demo 中,我们将演示当点击了伦敦的众多标记中的一个点后,他的 transit 相关信息。


result


第一步是在 storyboard 中创建 MKMapView 和 UITableView,添加一些必要的约束信息,以确保地图控件在页面的上半部分,而表格视图在页面的下半部分。


当这些完成后,给表格添加必要的元素。这里我们不展开解释怎么操作了,因为本文重点不是这个。你要确保 ViewController 作为 table 的数据源和 MKMapViewDelegate 的 delegate。当你把这些 UI 都创建好后,看起来像下面的样子。

iOS 9 学习系列:MapKit Transit


你需要自定义个UITableViewCell,目前为止,还很简单。都是一些 lable 控件,创建好他们和storyboard 之间的连接。

iOS 9 学习系列:MapKit Transit


现在 storyboard 已经创建好了,我们开始在地图上添加一些标记。为了完成这些,我们需要添加几个目的地。创建 Destination 类,用来存储与位置有关的信息。

iOS 9 学习系列:MapKit Transit


我们可以如下方式,简单的创建一个目的地。

iOS 9 学习系列:MapKit Transit


在 ViewController 的 viewDidLoad()方法中,添加如下代码,把目的地标示添加到地图中。

iOS 9 学习系列:MapKit Transit


iOS 9 学习系列:MapKit Transit


接下来,我们把目的地的相关信息,展示在表格中。

iOS 9 学习系列:MapKit Transit


运行程序,你会看到目的地都已经标示在了地图上,同时在表格里也显示了标示的目的地的名称。

iOS 9 学习系列:MapKit Transit


step 1


我们给地图控件添加一个点击的手势。

iOS 9 学习系列:MapKit Transit


然后我们创建一个获取点击后的方法,将点击事件转换为地图上的一个坐标。

iOS 9 学习系列:MapKit Transit


当创建完成后,我们把 coordinate 存储起来,稍后会用到。我们添加一个 annotation 用来展示用户的位置,如果之前已经存在的话,请先清除再添加。

iOS 9 学习系列:MapKit Transit


最后,我们要把位置信息设置给表格的 cell,然后来更新 ETA 的信息。 首先,添加如下代码:

iOS 9 学习系列:MapKit Transit


同样我们还需要给表格的 tableView:cellForRowAtIndexPath 的方法复制,以确保重新加载表格时能够正确的现实数据。添加如下代码:

iOS 9 学习系列:MapKit Transit


当坐标正确的赋值给 tableviewcell 之后,我们要更新相关信息。

我们可以调用 userCoordinate 的 didSet 属性来设置更新。首先,我们要清理掉所用的lable的信息,因为之前所有的展示信息都不需要了。

iOS 9 学习系列:MapKit Transit


现在我们有了一个用户设置的坐标作为起始位置,我们可以创建一个MKDirectionsRequest 对象来计算 ETA信息。我们设置MKMapItem的属性,设置initialised的坐标,设置终点坐标,设置transportType。最后,我们在calculateETAWithCompletionHandler 里获取ETA的信息,然后更新label的值。

iOS 9 学习系列:MapKit Transit


现在,运行程序,你会得到下面的效果。

iOS 9 学习系列:MapKit Transit


当你在地图上点击某处后,相应的表格里的ETA信息发生变化。

还有最后一件事时,响应 View Route 按钮的事件。在 IBAction 里添加如下代码:


这将会在打开的地图应用中,显示目的地,并展示出导航路线来。


Customising the Pin Colors


现在应用已经完整了,但是还有一点儿小毛病。就是无法分辨出哪些是我们展示的,哪些是用户点击的坐标。为了自定义 pin 的显示,我们指定 MKMapViewDelegate 的代理为ViewController,并实现它的协议。添加如下代码:


pinTintColor 是iOS 就中新介绍的可以设置(大头针)颜色的新的属性。如你所看到的,我们把用户点击后的大头针坐标的颜色设为红色。把一开始就设置好的目的地的大头针颜色设为蓝色。这样可以方便的分辨出用户设置的出发点和预设好的目的地的点。

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《iOS 9 学习系列:MapKit Transit》的版权归原作者「iOS笔记」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注iOS笔记微信公众号

iOS笔记微信公众号:iosnotes

iOS笔记

手机扫描上方二维码即可关注iOS笔记微信公众号

iOS笔记最新文章

精品公众号随机推荐