從文檔的MKRoadWidthAtZoomScale
:iOS 6中的MKRoadWidthAtZoomScale?
你不應該使用這個功能的iOS 6及更高版本以獲取道路寬度。
是否有其他功能可以替代使用,或者這只是在iOS 6中缺少的功能?
如果你不應該使用它,這個函數沒有被棄用是很奇怪的。
從文檔的MKRoadWidthAtZoomScale
:iOS 6中的MKRoadWidthAtZoomScale?
你不應該使用這個功能的iOS 6及更高版本以獲取道路寬度。
是否有其他功能可以替代使用,或者這只是在iOS 6中缺少的功能?
如果你不應該使用它,這個函數沒有被棄用是很奇怪的。
我會冒險猜測它沒有被棄用,因爲功能將被添加回來。該功能在iOS 6中仍然有效,因爲它在調用時不會導致崩潰,即使輸出沒有用。
如果您查看(Apple)Maps應用程序,可以看到當您放大方向路徑時,路徑寬度會以最高縮放級別增加。道路寬度也會在這些高放大級別上增加。顯然,蘋果有一種內在的方式可以知道變焦時道路有多寬。也許它還沒有經過全面的測試。
爲了防止任何人認爲您仍然可以使用此功能,建議的道路寬度從完全放大(MKZoomScale = 1)開始並縮小。
代碼:
for (float zoomScale=1; zoomScale>0.00001; zoomScale /= 2) {
NSLog(@"zoomScale: %f Road Width: %f", zoomScale, MKRoadWidthAtZoomScale(zoomScale));
}
結果:
zoomScale: 1.000000 Road Width: 21.000000
zoomScale: 0.500000 Road Width: 32.000000
zoomScale: 0.250000 Road Width: 60.000000
zoomScale: 0.125000 Road Width: 96.000000
zoomScale: 0.062500 Road Width: 176.000000
zoomScale: 0.031250 Road Width: 288.000000
zoomScale: 0.015625 Road Width: 448.000000
zoomScale: 0.007812 Road Width: 768.000000
zoomScale: 0.003906 Road Width: 1536.000000
zoomScale: 0.001953 Road Width: 2048.000000
...
至於替換功能,我建議剛創建的最高2個或3的縮放級別工作以及一些值,並用低於此值的常數值。
下面是蘋果地圖路線在低和高放大倍率上的疊加。您可以看到替代路線沒有考慮較大的道路寬度,但主要路線寬度是現場。更改路線不會影響替代路線寬度。
由於iOS的7.1有文檔中沒有任何警告有關MKRoadWidthAtZoomScale
了。它在MKOverlayRenderer.h
中定義,它是在iOS 7.0中引入的。
謝謝你不厭其煩地寫這篇文章。不幸的是我發現很難跟蹤。使用禁止函數*會給你一個相當合理的結果(我試過了)。在縮小的水平上使用常量將會產生非常細的線條。蘋果選擇以兩種不同寬度顯示線條可能表明爲什麼他們認爲一個功能不是要走的路,但似乎沒有提到任何有關「MkRoadMapWidthAtZoomScale」本身的內容。 – Bryan
當你說你得到了合理的結果時,你如何使用'MKRoadWidthAtZoomScale()'以及它在處理什麼操作系統?當我說「使用一個常量」時,我的意思是用一個常量代表道路寬度,而不是從一個函數中獲取道路寬度。當縮小時,這將給你_fat_行,而不是細長的。放大,如果你不改變寬度,線條會變得太薄。 –
我如何使用它:基本上CGContextSetLineWidth(context,MKRoadWidthAtZoomScale(zoomScale));在iOS 6.1上。我只是試了一個常數--5000 - 我只能認爲你正在用相反的方式使用「放大」 - 對我來說,放大時地圖特徵非常大,線條很胖,而且我看到整個國家在縮小時,線條很薄。 – Bryan