本节书摘来自异步社区《ios组件与框架——ios sdk高级特性剖析》一书中的第2章,第2.3节显示地图,作者 【美】kyle richter , joe keeley,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.3 显示地图
ios组件与框架——ios sdk高级特性剖析
mapkit框架为ios提供了地图用户界面功能,其中的基本类是mkmapview,它显示地图、处理用户与地图的交互以及管理标注(像大头针)和覆盖层(如线路图或突出区域)。要更深入地了解ios中地图的工作原理,必须明白坐标系。
2.3.1 理解坐标系
在mapkit中,有两个坐标系:地图坐标系和视图坐标系。地图使用墨卡托投影,将3d世界地图投影到2d坐标系。坐标可使用经度和纬度指定。地图视图表示显示在屏幕上的地图部分,它使用标准的uikit视图坐标,并负责决定在什么地方显示地图坐标指定的点。
2.3.2 配置和定制mkmapkit
在示例应用中,icfmainviewcontroller包含一个地图视图,它在地图上显示用户的位置,并允许用户滚动和缩放;在interface builder中,将这个地图视图配置成了标准类型。icfmainviewcontroller有一个分段控件,让用户能够调整地图类型。
除设置地图类型外,另一种常见的定制是设置地图显示的区域。在icfmainviewcontroller中,有一个名为zoommaptofitannotations方法,它检查用户当前喜欢的地点,调整地图的大小和中心位置,以覆盖所有这些地点。这个方法首先设置默认的最大和最小坐标。
接下来,这个方法获取地图上所有的标注(这将在 2.4 节更详细地介绍),并找出这些标注中最大和最小的经度和纬度。
如果将参数animated:设置为yes,可以动画方式放大地图,就像放大操作是用户执行的那样;如果将它设置为no,将瞬间放大地图,而没有动画效果。
2.3.3 响应用户交互
可给mkmapview指定委托,以便对用户与地图交互做出响应。用户与地图的交互包括平移和缩放、拖曳注释(annotation)以及用户轻按标注(callout)时进行响应。
用户平移或缩放地图时,将调用委托方法mapview:regionwillchangeanimated:和mapview: regiondidchangeanimated:。在示例应用中,不需要采取额外的措施来缩放地图和调整注释。然而,如果应用在地图上显示了大量信息或显示的信息随缩放等级而异,就可使用这些委托方法来删除不可见的地图注释以及添加新出现的注释。在示例应用中,这个委托方法演示了如何获取新的地图区域,这可用来查询要在地图上显示的内容。
如何在用户拖曳注释或轻按标注时做出响应,这将下一节介绍。