2017-06-22 6 views
1

Ich denke schon seit einiger Zeit darüber nach und habe keine passende Antwort darauf gefunden.Swift - Leistung von `UIGestureRecognizer`, wenn ich viele von ihnen habe

Wie performant sind UIGestureRecognizer in Swift/iOS-Entwicklung?

mich Ihnen ein theoretisches Beispiel erklären lassen, indem sie: Sie haben eine App auf dem iPad Pro (großen Bildschirm, viel Platz) und dort haben Sie vielleicht Dutzende von verschiedenen views und buttons und so weiter. Aus welchem ​​Grund auch immer benötigen Sie alle diese views und buttons beweglich/anklickbar/resizable/...

Was ist besser?

  • ein Hinzufügen (oder mehrere) UIGestureRecognizer(s) zu jeder Ansicht (die viele aktive Geste Erkenner und viele kleine, spezifische Handhabungsverfahren ergibt [möglicherweise für jede Art von view gruppiert])
  • ein Hinzufügen einzelner Erkennungseinrichtung zum superview (die in einem aktiven Gestenerkenner und ein großen Handhabungsverfahren resultiert, die durch die subviews zu Zyklus benötigt, und bestimmen, welches angezapft wurde)

Ich denke, der erste ist der einfachste, aber ist er langsamer als der zweite? Da bin ich mir nicht sicher. Mein Magen sagt mir, dass so viele UIGestureRecognizers keine gute Lösung sein können.

Aber so oder so muss das System alles durchlaufen (im schlimmsten Fall), sei es viele Erkenner oder viele subviews. Ich bin neugierig darauf.

Danke

+0

>>> Aus irgendeinem Grund müssen Sie jede dieser Ansichten und Schaltflächen beweglich/anklickbar/veränderbar sein/... Sie brauchen es in einem Moment für alle Elemente oder basierend auf einigen Staat nur ein Teil von ihnen muss sein beweglich/anklickbar/veränderbar /? –

+0

"(...) indem ich Ihnen ein theoretisches Beispiel gebe (...)" - Es ist nichts Konkretes oder Wirkliches, ich mache keine App mit diesem oder ähnlichem. Es ist ein theoretisches Worst-Case-Szenario, in dem Sie jede einzelne Ansicht, die Sie auf dem Bildschirm sehen, verschieben/klicken/skalieren können. Nicht für einen einzigen Moment, sondern für immer, im Grunde genommen. Zu jedem Zeitpunkt sollten Sie in der Lage sein, eine beliebige Ansicht zu verschieben/tippen/.... – Quantm

Antwort

1

Let Blick auf Ihre Frage in Bezug auf die Gestenerkennung Flow -> Ereignis rechts Geste passieren erkennt das System geht durch den Ansichten Baum letzte spezifisch für diese Geste zu finden, das wird zurückkehren in einer speziellen Methode der UIView wahr - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

  • Hinzufügen von einem (oder mehreren) UIGestureRecognizer (en) auf jeder Ansicht

auf diese Weise I EMPFEHLU nded zu verwenden. In diesem Fall wird das System die meiste Arbeit für Sie erledigen und Sie vor Fehlern bewahren, die später schwer zu debuggen sind - vertrauen Sie mir. Dies ist für die Benutzeroberfläche. Vor allem, wenn Sie mehrere verschiedene Gesten auf verschiedenen Teilen eines Bildschirms haben. In meinem speziellen Fall habe ich eine riesige Videoplayer-Benutzeroberfläche, die ungefähr 20 Gestenerkenner auf einem Bildschirm hat und sich ziemlich gut anfühlt - keine Verzögerungen oder Bildverlust in der Benutzeroberfläche. dieser Weg ist einfach und selbstbeschreibend. Ich empfehle es mit Storyboard oder Xib zu implementieren. Sie können jederzeit auf Interface Builder und später darauf zurückgreifen, um zu erfahren, welche Recognizer Sie aktualisieren sollten, um das Verhalten der Benutzeroberfläche zu ändern. Die Geschwindigkeit dieses Ansatzes wird von einem System garantiert.

  • eine einzige Erkennungs zum Super Hinzufügen

diese Weise mit nur einem einfachen Geste könnte für eine mehr Ansichten verwendet (mehr> 20). Dies könnte passieren, wenn Sie ein Spiel implementieren, bei dem der Benutzer zum Beispiel Steine ​​unterschiedlicher Formen aufnimmt und einfügt.Es ist nicht für allgemeine UI-Aufgaben geeignet. Die Geschwindigkeit hängt von Ihrer Implementierung ab und basierend auf der Frage selbst werde ich nicht empfohlen. Dieser Ansatz ist designspezifisch und nicht geschwindigkeitsrelevant.

Verwandte Themen