2013-02-01 12 views
6

Aus der Dokumentation für MKRoadWidthAtZoomScale:MKRoadWidthAtZoomScale in iOS 6?

Sie sollten diese Funktion nicht verwenden, um Straßenbreiten in iOS 6 und später wieder abrufen.

Gibt es eine andere Funktion, die stattdessen verwendet werden könnte, oder fehlt nur die Funktionalität in iOS 6?

Es ist seltsam, dass die Funktion nicht veraltet war, wenn Sie sie nicht verwenden sollten.

Antwort

3

Ich würde vermuten, dass es nicht veraltet war, weil die Funktionalität irgendwann wieder hinzugefügt wird. Die Funktion funktioniert immer noch in iOS 6, da sie beim Aufruf keinen Absturz verursacht, obwohl die Ausgabe nicht sinnvoll ist.

Wenn Sie sich die App (Google Maps) ansehen, können Sie sehen, dass beim Vergrößern eines Routenpfads die Breite des Pfads bei den höchsten Zoomstufen zunimmt. Die Breite der Straße erhöht sich auch bei diesen hohen Zoomstufen. Offensichtlich hat Apple einen internen Weg zu wissen, wie breit die Straßen beim Zoomen sind. Vielleicht wurde es noch nicht vollständig für die allgemeine Veröffentlichung getestet.

Nur für den Fall, dass jemand denkt, dass Sie diese Funktion noch nutzen können, hier sind die vorgeschlagenen Straßenbreiten beginnend mit voll gezoomt (MKZoomScale = 1) und herauszoomen.

Code:

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

Ergebnisse:

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

Wie für eine Ersatzfunktion, würde ich vorschlagen, nur einige Werte schaffen, die für die höchsten 2 oder 3 Zoomstufen gut funktionieren und eine mit konstanter Wert darunter.

Hier ist die Apple Maps Route Overlay bei niedrigen und hohen Zooms. Sie können sehen, dass die alternative Route nicht die größere Straßenbreite berücksichtigt, aber die Hauptroutenbreite ist genau richtig. Das Ändern der Route wirkt sich nicht auf die alternative Routenbreite aus.

enter image description here

+1

Vielen Dank, dass Sie sich die Mühe gemacht haben, dies zu schreiben. Leider fällt es mir schwer zu folgen. Die Verwendung der verbotenen Funktion * gibt Ihnen ein ziemlich vernünftiges Ergebnis (ich habe es versucht). Die Verwendung einer Konstante bei herausgezoomten Ebenen würde sehr dünne Linien ergeben. Apples Wahl, Linien in zwei verschiedenen Breiten zu zeigen, zeigt vielleicht, warum sie denken, dass eine Funktion nicht der richtige Weg ist, aber sie sagt nichts über 'MkRoadMapWidthAtZoomScale' selbst. – Bryan

+0

Wenn Sie sagen, dass Sie vernünftige Ergebnisse erhalten haben, wie haben Sie 'MKRoadWidthAtZoomScale()' verwendet und an welchem ​​OS wurde gerade gearbeitet? Wenn ich "Konstante verwenden" sage, dann verwende ich eine Konstante für die Straßenbreite in Punkten, anstatt die Straßenbreite von einer Funktion zu erhalten. Dadurch erhalten Sie _fat_ Linien, wenn sie herausgezoomt sind, nicht dünne Linien. Wenn Sie die Breite nicht ändern, sind die Linien zu groß. –

+1

Wie habe ich es verwendet: im Grunde CGContextSetLineWidth (Kontext, MKRoadWidthAtZoomScale (ZoomScale)); auf iOS 6.1. Ich habe gerade eine Konstante ausprobiert - 5000 - und ich kann nur glauben, dass Sie "gezoomt" die entgegengesetzte Richtung verwenden, die ich denke - für mich sind Kartenmerkmale wirklich groß, wenn sie herangezoomt werden, und die Linie ist fett, und ich sehe ganz Länder, wenn herausgezoomt, und die Linie ist dünn. – Bryan

0

Ab iOS 7.1 gibt es keine Warnung in der Dokumentation über MKRoadWidthAtZoomScale mehr. Es ist in MKOverlayRenderer.h definiert, die in iOS 7.0 eingeführt wurde.