2012-03-27 10 views
0

Andere dann UIGestureRecognizers in einer Reglereinstellung:Auf UIGestureRecognizers, benötigte Klarstellung

UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] 
       initWithTarget:v action:@selector(handleSwipe:)]; 
swipeGesture.direction= UISwipeGestureRecognizerDirectionUp; 
[v addGestureRecognizer:swipeGesture]; 

Und macht ein Verfahren in einer Ansicht verfügbar

-(void)handleSwipe:(UISwipeGestureRecognizer *)sender { 
    NSLog(@"Swipe detected"); 
} 

Gibt es noch etwas gebraucht? Wenn nicht, was fehlt mir bitte? Wenn Geste simuliert wird, wird NSLog Druck nicht

+0

Übrigens. Wie simulierst du den Swipe? Machst du es mit UIAutomation? Dann musst du dich auch ein bisschen in x Richtung bewegen. – dasdom

+0

Ich glaube, Swipe ist nichts als eine schnelle Pfanne über eine kleine Entfernung. – JAM

Antwort

2

bearbeiten

ich von your recent question sehen, dass Sie auch eine pan Gestenerkenner verwenden. Gestenerkenner wissen nicht wirklich gut miteinander ohne Anleitung zu spielen. Sie haben zwei Möglichkeiten

1) Der eine oder andere:

[panGesture requireGestureRecognizerToFail:swipeGesture]; 

Die Pfanne wird nur ausgelöst, wenn die Berührung nicht Swipe ist. oder-

2) beide zur gleichen Zeit:

Conform die das UIGestureRecognizerDelegate Protokoll.

Stellen Sie die Delegierten:

panGesture.delegate = self; 
swipeGesture.delegate = self; 

und Umsetzung der Methode:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 
    return YES; 
} 

Original-

Gerade jetzt Sie die Ansicht v als Ziel des Erkennungs einstellen, so im Wesentlichen, wenn der Swipe erkannt wird, ruft der Recognizer:

[v handleSwipe:self]; 

Es scheint wahrscheinlicher, dass beide Methoden in einem View-Controller sind. Wenn das der Fall ist, dann sollte der init-Methode wie folgt aussehen:

UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] 
      initWithTarget:self action:@selector(handleSwipe:)]; 

Da v das beabsichtigte Ziel ist und mit diesem Gedanken Code ist in Ordnung; Ich würde denken, die nächste wahrscheinlichste Ursache ist, dass Ihr erstes Stück Code vor der Ansicht v lädt ausgeführt wird. d.h. der Code ist nicht in viewDidLoad, nachdem v bereits existiert. Wenn Sie nicht sicher ein einfaches Protokoll sind wird es die Existenz bestätigen:

NSLog(@"v is %@",v); 

Wenn das eine Sackgasse erweist werden wir auf jeden Fall weitere Informationen v auf dieser Ansicht erfordern. Was ist es Superklasse? Gibt es andere Erkenner darauf? Wie wird es zur view hinzugefügt?

+0

+1 Ich hatte die Einstellung des falschen Ziels nicht gesehen. – dasdom

+0

@dasdom Danke. Aber deine Antwort ist wahrscheinlich richtig. Das würde erklären, warum er im Gegensatz zu dem Crash, den er bekommen würde, wenn ich recht hätte, einfach keine Log-Aussage bekommen würde. – NJones

+0

Mal sehen, wer recht hat. – dasdom

2

Überprüfen Sie, ob die Ansicht Benutzerinteraktion akzeptiert. Dies kann im Storyboard oder über [myView setUserInteractionEnabled: YES] erfolgen.

+0

+1 Ich hatte das nicht berücksichtigt. – NJones

+0

Versuchte das. Guter Punkt, aber Problem bleibt ungelöst. – JAM

Verwandte Themen