2014-03-18 6 views
6

Ich arbeite an einer App, die stark kartenbasiert ist, und ich benutze das MBXMapKit-Framework (über MapKit), um benutzerdefinierte Mapbox-Map-Kacheln in meiner MapView anstelle der Standard-Apple-Maps anzuzeigen. Während die Maps von Apple Vektoren sind, sind Mapbox-Dateien immer noch Rasterbild-Kacheln, daher werden sie vom MBXMapKit-Framework als Overlays angezeigt.MKOverlayRenderer schlimmer als MKOverlayView?

Das ist alles gut und gut, bis ich eine Polylinie auf der Karte mit einem MKOverlay zeichnen. Wie ich es verstehe, vor iOS 7, würden Sie eine MKOverlayView für den MapView-Delegaten bereitstellen, die auf der Karte gerendert werden würde, aber jetzt in iOS 7, das zugunsten MKOverlayRenderer veraltet ist, was, wenn ich richtig verstehe, mehr funktioniert wie ein drawRect von Art, wo ich direkt in einen Kontext mit dem Ergebnis auf der Karte angezeigt werden (ich weiß, dies ist nicht genau, wie es funktioniert, aber der Punkt ist, dass ich nicht mehr Zugriff auf eine einfache alte UIView haben, die ist wo meine Probleme entstehen).

Das erste Problem ist, dass es aussieht, wenn mein Overlay auf die Karte gezeichnet wird, wird es für jedes Feld gezeichnet. Dies ist in Ordnung, außer dass die Overlay-Kacheln mit den darunter liegenden Mapbox-Bildkacheln zusammengesetzt sind. Dies führt dazu, dass man eine einfache Polylinie mit 3 oder 4 Punkten sehen kann, die eine halbe Sekunde dauert (auf einem A7 iPad Air), und man sieht, dass sie in "Brocken" erscheint, wenn jede Kachel neu gezogen wird. Aus irgendeinem Grund werden alle nicht betroffenen Mapbox-Kacheln erneut geladen (alle blinken für einen Bruchteil einer Sekunde). Offensichtlich aus UX-Perspektive sieht das wie ein Witz aus und ist völlig inakzeptabel. Das zweite Problem ist, dass, weil ich keinen Zugriff mehr auf ein UIView wie ich in iOS 6 haben, ich nicht sehen, wie ich das Overlay animieren kann - was ich möchte, ist die Polylinie verblassen anstatt es sofort anzuzeigen (obwohl ich an dieser Stelle das ganze Ding sofort anzeigen würde, wenn ich es so sehe, als ob es Kachel für Kachel gerendert wird, als würde es aus einem Nadeldrucker gespuckt, aber Sie verstehen, was ich meine).

Also meine Hauptfrage wäre, fehle ich etwas, oder ist MKOverlayRenderer FAR weniger flexibel und nützlich als MKOverlayView? Logischerweise würden Sie erwarten, dass Sie eine Ebene auf einer Karte als ein individuelles Objekt behandeln können, das manipuliert werden kann, an das Ereignisse gebunden sind, und nicht als Rasterpixeldaten, die Sie in die Map brennen und nie wieder ändern können oder interagieren mit (ohne die ganze Sache neu zu zeichnen), und threads like this scheinen zu suggerieren, dass Apple im Wesentlichen die Fähigkeit, viele Dinge mit Overlays zu tun, die Sie in der Lage waren, ziemlich leicht zu tun, entfernt hat.

Da MKOverlayView jetzt veraltet ist und daher die entsprechenden Delegate-Methoden nicht mehr aufgerufen werden, gibt es eine Lösung für diese Probleme? So wie es jetzt aussieht, kann ich es aufgrund der Leistungsprobleme und der mangelnden Animationsfähigkeit nicht für eine Produktionsanwendung verwenden.

Bearbeiten: Ein weiteres Leistungsproblem, das ich beim Zeichnen einer MKOverlay bemerkte, ist, dass es andere Animationen beeinflusst, die während der Zeichnung stattfinden. Wenn ich auf eine Map-Annotation tippe, wird eine QuickInfo gleichzeitig zur Animation des Polylinien-Renderings animiert - Sicher, das Rendering bewirkt, dass die Tooltip-Animation Frames löscht.

Antwort

Verwandte Themen