2016-05-16 67 views
6

IOS上的Mapkit是否支持重疊出隊? (就像註釋一樣)。如果是這樣的代碼是什麼?Mapkit on IOS支持重疊排隊嗎? (就像註釋一樣)

背景:通過註釋,我相信你可以添加很多,讓MapKit在需要時通過出列方法實例化視圖。然而,如果我在全國有很多地方,覆蓋物的情況如何呢?我是否需要編寫代碼來檢查哪些疊加層是可見或不可見的,然後實例化它們/將它們自己實時刪除?

+0

PS。此外,無論人們是否真的(如果這是一個問題)將覆蓋圖放在地圖上作爲「註釋」,以解決這個問題?可能不適用於大型疊加層,但作爲疊加層的一部分可能不在屏幕上...... – Greg

+0

PSS。實際上在全國各地有大約8000個左右的覆蓋到位,所以最終我是否會預先加載它們,還是我需要自己手動管理它們,以便在任何時間點只加載更小的數字?即那些將是可見的 – Greg

回答

3

Map Kit不支持以與支持註解視圖相同的方式重用覆蓋圖。其中一個原因肯定是這兩個對象不是類似的。覆蓋圖是表示地圖上區域的模型對象,而註記視圖是不時用於顯示地圖上註釋位置的視圖對象。重用視圖對象(而不是爲每個用戶創建單獨視圖對象)的技術是在UIKit中的其他幾個位置使用的優化,特別是對於表視單元和集合視圖的各種位。

視圖重用模式是建立一些數據索引(表索引的路徑,地圖座標),然後有一個代表提供當一個特定的索引/位置進入視野使用恰當的視圖對象。當數據對象不在視線內時,視圖對象將被循環到隊列中。

註釋是類似於覆蓋,並MapKit不會爲他們提供任何重用並有很好的理由:他們是正在顯示的數據!

註解視圖的類似對象是覆蓋渲染器,它(當然!)爲覆蓋圖提供渲染。我假設這些不被重用的原因是因爲它們不是查看系統對象,並且可能更輕,所以重用幾乎沒有什麼好處。我們發現這樣的證據,即在iOS 7.0之前,MapView代理確實爲提供了覆蓋圖的視圖對象,並且這已被渲染器概念所取代。

我希望有幫助。

這對您造成了什麼問題?附件號碼:

+0

我有幾百覆蓋整個國家。是否可以加載大量數據,然後將其留給MapView來優化需要顯示的內容?可能需要將這些添加到主線程中,以便在應用程序啓動時的啓動時間對用戶不明顯,那我想呢?也有是如何獲得可見覆蓋僅適用於我在這裏有一個問題清單的問題:http://stackoverflow.com/questions/37433336/how-to-get-visible-overlays-in-mapkit-ie -mkoverlay-mkoverlayrender-從-A-MA – Greg

+0

PS其實在全國有大約8000左右覆蓋到位,所以最終我加載它們都在前期,或者我需要管理他們自己手動使得僅在任何一個時間點加載的數字要小得多?即那些將是可見的 – Greg

+0

8000是一個很大的數字。 我測試了覆蓋美國的7200個覆蓋圖,並在iPhone 5/iOS 9.3上看到了明顯的緩慢。爲了體面的表現,做一些平鋪是必要的。但是,我採取了一個簡單的措施,這並不是特別有希望。它看起來像添加或刪除大量覆蓋本身的操作本身並不是很快。也許你可以重新組織你的數據,以便每個MKOverlay代表地圖區域內的「疊加層」圖塊。您的疊加渲染器在繪製適當的數據項時需要非常聰明。 – BrentM