Ich habe eine UIImageView
, die ich in der Lage sein möchte, die Größe zu ändern und zu drehen usw.
Kann ein UIGestureRecognizer
zum hinzugefügt werden UIImageView
?
Ich möchte einen Rotations- und Pinch-Erkenner zu einem hinzufügen UIImageView
, der zur Laufzeit erstellt wird.
Wie fügt man diese Erkenner hinzu?
userInteractionEnabled
muss in Xcode 8 Objective-C / SwiftJa, ein UIGestureRecognizer kann zu einer UIImageView hinzugefügt werden. Wie in der anderen Antwort angegeben, ist es sehr wichtig, sich daran zu erinnern, die Benutzerinteraktion in der Bildansicht zu aktivieren, indem die
userInteractionEnabled
Eigenschaft auf festgelegt wirdYES
. UIImageView erbt von UIView, dessen BenutzerinteraktionseigenschaftYES
standardmäßig festgelegt ist. Die Benutzerinteraktionseigenschaft von UIImageView ist jedochNO
standardmäßig festgelegt.Aus den UIImageView-Dokumenten:
Wie auch immer, auf den Großteil der Antwort. Hier ist ein Beispiel, wie Sie ein
UIImageView
mit aUIPinchGestureRecognizer
, aUIRotationGestureRecognizer
und a erstellenUIPanGestureRecognizer
.viewDidLoad
Erstellen Sie zunächst in oder einer anderen Methode Ihrer Wahl eine Bildansicht, geben Sie ihr ein Bild und einen Rahmen und aktivieren Sie die Benutzerinteraktion. Erstellen Sie dann die drei Gesten wie folgt. Stellen Sie sicher, dass Sie die Eigenschaft delegate verwenden (höchstwahrscheinlich auf self eingestellt). Dies ist erforderlich, um mehrere Gesten gleichzeitig zu verwenden.Hier sind die drei Methoden, die aufgerufen werden, wenn die Gesten in Ihrer Ansicht erkannt werden. In ihnen überprüfen wir den aktuellen Status der Geste. Wenn sie sich entweder in der begonnenen oder in der geänderten
UIGestureRecognizerState
Form befindet, lesen wir die Skalierungs- / Rotations- / Übersetzungseigenschaft der Geste, wenden diese Daten auf eine affine Transformation an und wenden die affine Transformation auf das Bild an Zeigen Sie die Gesten an: Skalieren / Drehen / Verschieben.Schließlich und vor allem müssen Sie die UIGestureRecognizerDelegate- Methode verwenden
gestureRecognizer: shouldRecognizeSimultaneouslyWithGestureRecognizer
, damit die Gesten gleichzeitig funktionieren. Wenn diese drei Gesten die einzigen drei Gesten sind, denen diese Klasse als Delegat zugewiesen ist, können Sie einfachYES
wie unten gezeigt zurückkehren. Wenn Sie jedoch zusätzliche Gesten haben, denen diese Klasse als Delegat zugewiesen ist, müssen Sie dieser Methode möglicherweise Logik hinzufügen, um zu bestimmen, welche Geste welche ist, bevor sie alle zusammenarbeiten können.Vergessen Sie nicht sicherzustellen, dass Ihre Klasse dem UIGestureRecognizerDelegate- Protokoll entspricht. Stellen Sie dazu sicher, dass Ihre Benutzeroberfläche ungefähr so aussieht:
Wenn Sie es vorziehen, selbst mit dem Code in einem funktionierenden Beispielprojekt zu spielen, finden Sie das von mir erstellte Beispielprojekt mit diesem Code hier.
quelle
Swift 4.2
und wenn getippt:
quelle
Swift 2.0-Lösung
Sie erstellen im selben Herrenhaus einen Tipp-, Kneif- oder Wischgestenerkenner. Im Folgenden werde ich Sie durch 4 Schritte führen, um Ihren Erkenner zum Laufen zu bringen.
4 Schritte
1.) Erben Sie
UIGestureRecognizerDelegate
von, indem Sie es Ihrer Klassensignatur hinzufügen.2.) Steuern Sie das Ziehen von Ihrem Bild auf Ihren viewController, um ein IBOutlet zu erstellen:
3.) Fügen Sie in Ihrem viewDidLoad den folgenden Code hinzu:
4.) Erstellen Sie die Funktion, die aufgerufen wird, wenn Sie auf Ihre Gestenerkennung tippen. (Sie können das ausschließen,
= nil
wenn Sie möchten).Ihr endgültiger Code sollte ungefähr so aussehen:
quelle
Ich habe dies gerade mit swift4 gemacht, indem ich 3 Gesten in einer einzigen Ansicht hinzugefügt habe
Hier mein Beispielcode
Bei Fragen geben Sie einfach einen Kommentar ein. Danke
quelle
SWIFT 3 Beispiel
Keine Gestenerkennungsdelegierten oder andere Implementierungen, falls erforderlich.
quelle
Sie können auch einen Tippgestenerkenner in die Bildansicht ziehen
Storyboard
. Erstellen Sie dann eine Aktion mitctrl + drag
dem Code.quelle
Für Blockliebhaber können Sie ALActionBlocks verwenden , um die Aktion von Gesten im Block hinzuzufügen
quelle