2013-02-01 23 views
6

Od docs dla MKRoadWidthAtZoomScale:MKRoadWidthAtZoomScale w systemie iOS 6?

Nie należy używać tej funkcji do pobierania szerokości dróg w iOS 6 i nowszych.

Czy istnieje inna funkcja, która może zostać użyta zamiast tego, czy jest to po prostu brakująca funkcja w systemie iOS 6?

To dziwne, że funkcja nie była przestarzała, jeśli nie powinieneś jej używać.

Odpowiedz

3

Zgaduję, że nie został wycofany, ponieważ funkcja zostanie z powrotem dodana w pewnym momencie. Funkcja nadal działa w systemie iOS 6, ponieważ nie powoduje awarii po wywołaniu, nawet jeśli wyjście nie jest użyteczne.

Jeśli spojrzysz na aplikację (Apple) Mapy, zobaczysz, że po powiększeniu ścieżki kierunkowej szerokość ścieżki wzrasta przy najwyższych poziomach powiększenia. Szerokość drogi zwiększa się również przy wysokich poziomach powiększenia. Oczywiście Apple ma wewnętrzny sposób, aby wiedzieć, jak duże są drogi podczas powiększania. Może nie został w pełni przetestowany pod kątem ogólnego wydania.

Na wszelki wypadek, gdy ktoś myśli, że nadal można korzystać z tej funkcji, oto sugerowane szerokości dróg rozpoczynające się od pełnego powiększenia (MKZoomScale = 1) i pomniejszanie.

Kod:

for (float zoomScale=1; zoomScale>0.00001; zoomScale /= 2) { 
    NSLog(@"zoomScale: %f Road Width: %f", zoomScale, MKRoadWidthAtZoomScale(zoomScale)); 
} 

Wyniki:

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 
... 

Jak dla funkcji zastępczej, sugeruję tylko tworzenie pewne wartości, które działają dobrze na najwyższych 2 lub 3 poziomach zoomu i za pomocą stała wartość poniżej.

Oto nakładka trasy mapy firmy Apple przy niskim i dużym powiększeniu. Widać, że trasa alternatywna nie uwzględnia większej szerokości drogi, ale główna szerokość trasy jest na miejscu. Zmiana trasy nie wpływa na alternatywną szerokość trasy.

enter image description here

+1

Dziękujemy za trudność napisania tego. Niestety uważam, że jest to dość trudne do naśladowania. Używanie niedozwolonej funkcji * nie * daje dość rozsądny wynik (próbowałem tego). Używanie stałej na pomniejszonych poziomach dawałoby bardzo cienkie linie. Wybór jabłek, aby wyświetlić linie o dwóch różnych szerokościach, może świadczyć o tym, dlaczego uważają, że jedna funkcja nie jest drogą do zrobienia, ale nie mówi nic o samym 'MkRoadMapWidthAtZoomScale'. – Bryan

+0

Kiedy mówisz, że masz rozsądne wyniki, w jaki sposób używasz 'MKRoadWidthAtZoomScale()' i na jakim systemie operacyjnym on pracował? Kiedy mówię "używając stałej", używam stałej dla szerokości drogi w punktach, zamiast uzyskiwać szerokość drogi z funkcji. To da Ci __ linie po pomniejszeniu, a nie cienkie. Powiększony, jeśli nie zmienisz szerokości, linie będą zbyt cienkie. –

+1

Jak tego używałem: w zasadzie CGContextSetLineWidth (context, MKRoadWidthAtZoomScale (zoomScale)); na iOS 6.1. Po prostu próbowałem stałej - 5000 - i mogę tylko myśleć, że używasz "powiększonego" w przeciwny sposób, jaki o tym myślę - dla mnie, funkcje mapy są naprawdę duże po powiększeniu, a linia jest gruba i widzę całą w krajach pomniejszonych, a linia jest cienka. – Bryan

0

Jako iOS 7.1 nie ma ostrzeżenia w dokumentacji już o MKRoadWidthAtZoomScale. Jest on zdefiniowany w MKOverlayRenderer.h, który został wprowadzony w iOS 7.0.