2013-11-28 106 views
8

我正在尋找一種在iOS 7中實現自定義地圖樣式的方法,就像您可以使用Google Maps一樣。我發現一些帖子說這對MapKit來說是不可能的,但是他們都已經發布了。爲了澄清,我正在談論自定義顏色,最好是字體。下面的自定義Google地圖樣式的示例。MapKit中的自定義地圖樣式

http://www.servendesign.com/wp-content/uploads/2011/12/zaarley-custom-google-maps.jpg

,我真的很喜歡使用MapKit性能方面的原因,但如果不支持它,我願意接受使用其他框架以及。我見過的是MapBox和Cloudmade,當然還有Google Maps SDK。

有沒有辦法用MapKit做到這一點?如果不是,最好的方法是什麼?

回答

8

MKMapView不公開您想要自定義的屬性。 Google Maps SDK支持標記的自定義顏色和圖標,這可能足以滿足您的需要。

編輯:請繼續關注iOS 11,它可以提供這種級別的自定義。

+0

感謝您的意見。你知道谷歌地圖SDK與原生MapKit相比在性能方面如何? –

+0

我沒有權限,但我無法辨別Google Maps SDK演示應用程序和使用MapKit的任何應用程序之間的主要性能差異。因人而異。 – Marco

2

另一個選項是MBXMapKit,它是在Apple的MapKit上構建的MapBox庫,雖然它是爲MapBox圖層設計的。它與MapBox iOS SDK分開,這是一個基本的重寫,意圖像MapKit一樣工作,但不是基於它。

+0

謝謝,我會研究它。我確實喜歡它建立在MapKit上的事實。 –

15

MKMapView還提供了使用自定義拼貼覆蓋的可能性。 Openstreetmap有很多可用於獲取自定義地圖的平鋪服務器列表。當然,總有可能創建自己的貼磚套裝。該流程在Openstreetmap wiki here中描述。

斯威夫特一個可能的實現看起來是這樣的:

1.導入MapKit

import MapKit 

2.添加疊加到地圖

let overlayPath = self.mapViewModel.overlayURL 
let overlay = MKTileOverlay(URLTemplate: overlayPath) 
overlay.canReplaceMapContent = true 
self.mapView.addOverlay(overlay) 

3.順應到MKMapViewDelegate

class ViewController: UIViewController, MKMapViewDelegate { ... } 

4.實現委託方法以使用正確的渲染器顯示瓦片

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer { 
    guard let tileOverlay = overlay as? MKTileOverlay else { 
     return MKOverlayRenderer(overlay: overlay) 
    } 
    return MKTileOverlayRenderer(tileOverlay: tileOverlay) 
} 

在上面的例子overlayURL從上OpenStreetMap的發現瓦片服務器列表採取:OpenstreetMap Tile Servers

例如,如果你想使用的雄蕊圖(具有水彩畫風格),您的網址看起來像:

let overlayURL = "http://tile.stamen.com/watercolor/{z}/{x}/{y}.jpg" 

如果你正在尋找一個深色模式的地圖,你可能去最好Carto黑暗:http://a.basemaps.cartocdn.com/dark_all/${z}/${x}/${y}.png

看到上面的URL沒有SSL支持(HTTP)。因此,您需要通過在Info.plist中添加App Transport Security Settings來允許對此特定URL的不安全HTTP請求。欲瞭解更多信息,請登錄this link

+0

你好@dehlen,感謝這個有用的答案。 Quick Q:我在MapViewController中的哪個位置放置了這個代碼(尤其是在第2點的塊,因爲無論我在哪裏放置它,都會收到紅色的錯誤信息) –

+0

@DimitriT您可以將它放在viewDidLoad函數中,例如 – dehlen

+0

謝謝Dehlen。如果你對我這樣的初學者可能如此友好 - 我應該添加什麼代碼來獲得mapViewModel類,因爲我收到錯誤'使用未解析的標識符MapViewModel'。我認爲我添加了一個新的swift文件,想知道如何添加這個,只是掌握了地圖和註釋的內容 - 關於這個類的任何提示都會有很大幫助 –