本節書摘來自異步社群《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:。在示例應用中,不需要采取額外的措施來縮放地圖和調整注釋。然而,如果應用在地圖上顯示了大量資訊或顯示的資訊随縮放等級而異,就可使用這些委托方法來删除不可見的地圖注釋以及添加新出現的注釋。在示例應用中,這個委托方法示範了如何擷取新的地圖區域,這可用來查詢要在地圖上顯示的内容。
如何在使用者拖曳注釋或輕按标注時做出響應,這将下一節介紹。