Wie richte ich einen UIScreenEdgePanGestureRecognizer mithilfe von Interface Builder ein?
Ich kann nicht UIScreenEdgePanGestureRecognizer
zu arbeiten, wenn ich erstellen, wenn ich es in mein view-controller mit Interface Builder, so Frage ich hier, um festzustellen, ob ich was falsch mache oder ob es ein bug in Xcode.
Hier sind die Schritte zum reproduzieren:
- Erstellen Sie ein neues Xcode-Projekt mit der "Single View Application" - template für iOS.
- Hinzufügen
UIView
auf die main view-controller, indem Sie eine aus der Bibliothek-Objekt im Interface Builder - Hinzufügen
UIScreenEdgePanGestureRecognizer
zu der Ansicht, indem Sie eine aus der Bibliothek-Objekt im Interface Builder - Sicherstellen, dass die Geste recogniser aktiviert ist und dass eine Kante ist ausgewählt:
- Öffnen Sie den assistant editor für die
ViewController
Klasse und Strg-ziehen Sie von derUIScreenEdgePanGestureRecognizer
zu denViewController
's Umsetzung blockieren, um eine neue zu erstellenIBAction
` Fügen Sie einen Haltepunkt in der action-Methode Körper, um zu testen, ob die edge-pan-Geste erkannt wird
Ist der resultierende code ist wie folgt:
Wenn ich die Anwendung auf meinem Gerät (iPhone 6 mit iOS 8.02) der Haltepunkt nicht getroffen zu werden, wenn ich einen edge-swipe.
Gibt es etwas, was ich bin fehlt?
UPDATE: diese eingereicht wurde, als einen bug mit Apple (rdar://18582306) am 08-Oct-2014 und ist noch immer nicht gelöst in Xcode 6.4 (6E35b)
InformationsquelleAutor der Frage Jamie Bullock | 2014-10-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich ein Projekt eingerichtet, um zu testen Sie Ihre Frage und fand das gleiche Problem du hast. Hier sind die Szenarien, die ich eingerichtet um zu testen:
Ich habe genau so, wie Sie es Tat, mit Interface Builder zum erstellen der Bildschirm-Rand Geste. Der einzige Unterschied in meinem code ist, dass ich eine Zeile code in der Auswahl, damit der debugger haben würde, etwas zu beenden. Der debugger konnte nicht halt genau so, wie Sie fand.
Dann habe ich eine zusätzliche Geste mit der pinch-Geste auf die gleiche Ansicht, die Verwendung von Interface Builder und ich war in der Lage, den debugger anhalten innerhalb dieses Selektors. Also den Interface Builder zu sein scheint in der Lage zu bauen, andere gesten richtig.
In der ViewController.h-Datei habe ich die UIGestureRecognizerDelegate.
In der ViewController.m-Datei implementiert habe ich die Geste manuell.
Landete ich mit dem gleichen Abschluss du hast - es scheint etwas falsch mit dem Interface Builder die Implementierung der UIScreenEdgePanGestureRecognizer.
InformationsquelleAutor der Antwort sunergeos
Kann es als ein bug, aber eigentlich ist hier etwas nützliches:
"Nach dem erstellen eines Bildschirm-Rand pan gesture recognizer, weisen einen entsprechenden Wert zu den Rändern Eigenschaft, bevor Sie die gesture recognizer zu Ihrer Ansicht."
https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIScreenEdgePanGestureRecognizer_class/index.html
Diese Anforderung nur für UIScreenEdgePanGestureRecognizer, so dass ich denke, dass ist der Grund, warum Xcode machen es falsch, es muss umgesetzt werden, als die normale Abfolge, alloc->init->Hänge->Wert. Es wird funktionieren, alle anderen GestureRecongnizer aber nicht UIScreenEdgePanGestureRecognizer.
InformationsquelleAutor der Antwort Thomas LIU
Ich habe versucht, es in Xcode 7.0 Beta 4 (7A165t) und es ist noch ein bug. Hinzufügen der Bildschirm Edge-Pan-Gestik-Erkennung über den Interface Builder nicht nennen, auf die verwiesen wird IBAction jedoch, indem es programmatisch wie dieser gut funktioniert:
Hinweis: vergessen Sie nicht, fügen Sie die UIGestureRecognizerDelegate Protokoll zu Ihrer Klasse. Andernfalls bekommen Sie einen Fehler beim
edgeGestureRecognizer.delegate = self
InformationsquelleAutor der Antwort Peter
Sicher zu stellen, dass mehrere gesture recognizers zusammen arbeiten können, die Sie haben, um die Methode zu implementieren
shouldRecognizeSimultaneouslyWithGestureRecognizer
und true zurückgeben:Sorry für den Swift-code, aber Sie sollten Sie bekommen die Idee.
Diese Methode muss implementiert werden, selbst wenn Sie mit einer einzigen Geste Erkenner, weil die Ansicht kann über eine eigene (system -) Merkmale, wie
MKMapView
.InformationsquelleAutor der Antwort zisoft
Xcode ist nicht immer ein guter Nachbar. Sorry.
InformationsquelleAutor der Antwort Zelko
Es scheint, dass es ein bug in Xcode 6.4 interface builder und Swift. Auch Thomas LIU ' s Antwort war auch richtig: es scheint notwendig zu sein, um die .edge-Eigenschaft im code, als vielmehr mit den Interface Builder.
Obwohl es edge Checkboxen in IB, scheinen Sie ignoriert zu werden.
Ich löste es so:
Strg-ziehen Sie von der gestik-Erkennung, um die viewController-Klasse erstellen Sie ein IBOutlet:
dann, in viewDidLoad:
und schließlich Strg-ziehen Sie von der Erkennung, um zu erstellen Sie eine IBAction
InformationsquelleAutor der Antwort drtofu
Verkleidung gleichen Problem lange. Seine ein xcode Fehler, ist es besser, fügen Sie es programmatisch.
InformationsquelleAutor der Antwort itsji10dra