2013-02-01 19 views
6

Dalla documentazione per MKRoadWidthAtZoomScale:MKRoadWidthAtZoomScale in iOS 6?

Si consiglia di non utilizzare questa funzione per recuperare larghezze stradali in iOS 6 e versioni successive.

C'è un'altra funzione che potrebbe essere utilizzata, oppure questa funzionalità manca solo in iOS 6?

È strano che la funzione non sia stata dichiarata obsoleta, se non si dovesse usarla.

risposta

3

Mi azzardo a supporre che non è stato ritirato perché la funzionalità verrà riattivata a un certo punto. La funzione funziona ancora in iOS 6, in quanto non provoca un arresto anomalo quando viene chiamato, anche se l'output non è utile.

Se si guarda l'app (Apple) Maps, è possibile notare che quando si esegue lo zoom su un percorso di direzioni, la larghezza del percorso aumenta ai livelli di zoom più alti. La larghezza della strada aumenta anche a quegli alti livelli di zoom. Ovviamente Apple ha un modo interno per sapere quanto sono ampie le strade quando si esegue lo zoom. Forse non è stato completamente testato per la versione generale.

Nel caso in cui qualcuno pensi di poter ancora utilizzare questa funzione, ecco le larghezze stradali suggerite che iniziano con lo zoom completo (MKZoomScale = 1) e lo zoom indietro.

Codice:

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

Risultati:

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

Come per una funzione di sostituzione, io suggerirei solo la creazione di alcuni valori che funzionano bene per i più alti 2 o 3 livelli di zoom e utilizzando un valore costante inferiore a quello.

Ecco la sovrapposizione del percorso di mappe Apple a zoom bassi e alti. Puoi vedere che il percorso alternativo non prende in considerazione la larghezza della strada più ampia, ma la larghezza del percorso principale è azzeccata. La modifica del percorso non influisce sulla larghezza del percorso alternativo.

enter image description here

+1

Grazie per aver preso la briga di scrivere questo. Purtroppo lo trovo piuttosto difficile da seguire. L'uso della funzione proibita * * ti dà un risultato abbastanza ragionevole (l'ho provato). L'uso di una costante a livelli ridotti ridurrebbe le linee. La scelta delle mele di mostrare linee a due larghezze diverse indica forse perché pensano che una funzione non sia la strada da percorrere, ma non sembra dire nulla su 'MkRoadMapWidthAtZoomScale' stesso. – Bryan

+0

Quando dici che hai ottenuto risultati ragionevoli, come stai usando 'MKRoadWidthAtZoomScale()' e su quale sistema operativo stava lavorando? Quando dico "usando una costante", intendo usare una costante per la larghezza della strada in punti invece di ottenere la larghezza della strada da una funzione. Questo ti darà _fat_ lines quando fai lo zoom out, non quelli magri. Ingrandito, se non cambi la larghezza, le linee saranno troppo sottili. –

+1

Come lo usavo: fondamentalmente CGContextSetLineWidth (context, MKRoadWidthAtZoomScale (zoomScale)); su iOS 6.1. Ho appena provato una costante - 5000 - e posso solo pensare che tu stia usando "ingrandito" nel modo opposto che penso io - per me, le caratteristiche della mappa sono davvero grandi quando ingrandite, e la linea è grassa, e vedo tutto paesi quando si rimpicciolisce e la linea è sottile. – Bryan

0

Come di iOS 7.1 non v'è alcun avviso nella documentazione su MKRoadWidthAtZoomScale più. È definito in MKOverlayRenderer.h, che è stato introdotto in iOS 7.0.