UISwipeGestureRecognizer nicht funktioniert
Ich habe eine UIView innerhalb eines UIScrollView, beide erstellt mit IB. Die UIView scrollt horizontal im inneren der UIScrollView. Ich will erkennen, Links und rechts 2-finger-swipes.
Kreditaufnahme aus der Beispiel-code, den ich gefunden in SmpleGestureRecognizers, ich habe den folgenden code in die viewDidLoad Methode der UIScrollView ist ViewController...
UIGestureRecognizer *recognizer;
UISwipeGestureRecognizer *swipeRightRecognizer, *swipeLeftRecognizer;
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
swipeRightRecognizer = (UISwipeGestureRecognizer *)recognizer;
swipeRightRecognizer.numberOfTouchesRequired = 2;
[self.view addGestureRecognizer:swipeRightRecognizer];
[recognizer release];
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
swipeLeftRecognizer = (UISwipeGestureRecognizer *)recognizer;
swipeLeftRecognizer.numberOfTouchesRequired = 2;
swipeLeftRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeLeftRecognizer];
[recognizer release];
Habe ich in der viewcontroller.h. und haben folgende delegate-Methode...
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
return YES;
}
Ich gehe davon aus, dass dies eine gültige gestureRecognizer delegate-Methode, aber ich kann nicht finden jede Bezugnahme auf Sie in der Dokumentation.
Ich bekomme keine Fehler aber es passiert nichts, wenn ich eine 2 finger-streichen. Die delegate-Methode nicht aufgerufen wird, und weder meine action Methode. Ich habe versucht, das entfernen der numbeOfTouchesRequired nennen, um zu sehen, ob es funktionieren könnte mit einer einzigen Fingerbewegung ohne Erfolg.
Bin ich das hinzufügen der gestureRecognizers, um die richtige Sicht? Ich habe versucht, indem es der UIView, die UIScrollView so gut wie von selbst.Blick.superView.
Den Beispiel-code läuft Super. Der einzige Unterschied, den ich sehen kann, zwischen meine Umsetzung von dem code und dem Beispiel-code ist die Tatsache, dass ich IB zu erstellen, die Ansichten und den Beispielcode nicht. Ich vermute, dass etwas verbraucht und die swipe-Geste, bevor er meine Merkmale.
Was mache ich falsch.
Dank,
John
- eine Sache, die Sie daran erinnern gestik-Erkennung funktioniert erst ab os 3.2. Es ist besser, verwenden Sie berührt, begann die Methode zu verwenden, statt wischen-Geste
- Danke, ich denke, das ist die route, die ich nehmen werde.
- Warten auf iOS 5 SDK. UiSwipeGestures sind integriert in IB in xcode 4.2 und die können Sie ganz einfach verbinden Aktionen für gesten! Das macht es viel einfacher!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche problem, und ich gelöst, indem Sie UIPanGestureRecognizer statt UISwipeGestureRecognizer.
Zu emulieren, die Erkennung von swipe, spielen wir mit der Geschwindigkeit der Geste in der scrollview.
Wenn die Geschwindigkeit der x-Richtung >= 3000 (zum Beispiel) die swipe erkannt werden.
Wenn x>0 es wird eine richtige streichen.
Ich den code implementiert, um zu beheben Ihre situation ist:
In einem uiscrollview namens _scroll1:
Eine Globale BOOL-variable mit dem Namen _panning, Swipe4ScrollViews tun, die harte Arbeit:
Ich encapsulated es auf eine UIGestureRecognizer Unterklasse: UISwipe4ScrollGestureRecognizer
Der größte Unterschied zwischen den sample-code und deinem code ist, dass der code beinhaltet eine
UIScrollView
.Intern, Blättern, Ansichten, Tabelle, Ansichten und web-Ansichten verwenden alle gesture recognizers zu einem gewissen Grad. Wenn Sie erwarten, zu erhalten, gesten innerhalb Ansichten – die gesten sind ähnlich denen, die bereits intern unterstützt – Sie werden sicherlich verbraucht oder deutlich verzögert, bevor Sie zu Ihnen gelangen. Empfangen von gesten außerhalb oder oben diese Aussicht sollte funktionieren, wenn Ihre Nutzung Fall unterstützt es.
Versuchen Sie, die delayContentTouches-Eigenschaft der UIScrollView KEINE, vielleicht wird das helfen.