2010-12-16 2 views
13

Ich habe ein kleines Problem mit dem UIPanGestureRecognizer. Der Erkenner nicht den Zustand UIGestureRecognizerStateEnded melden, wenn der Benutzer auf den oben links geschwenkt (bedeutet negative x und y Richtungen)UIPanGestureRecognizer wechselt nicht in den Status "Ende" oder "Abbrechen", wenn der Benutzer x und y in negativer Richtung paginiert hat

die Zustandsänderungen zu UIGestureRecognizerStateEnded wenn jede Richtung positiv ist, wenn der Benutzer seinen Finger hebt, aber es hört einfach auf, Aktionen zu melden, wenn beide Richtungen negativ oder Null sind.

Das ist schlecht, weil ich einige Overlay-Ansichten ausblenden, solange der Benutzer etwas herum schleppt und diese Ansichten im Fehlerfall nicht zurückgeben.

Natürlich könnte ich einen NSTimer einrichten, um die Überlagerung nach einigen Zeit automatisch wieder anzuzeigen, aber ich kann keinen offensichtlichen Fehler in meinem Code sehen und ich will es sauber.

Gibt es etwas, das ich vermisst habe? Ist es ein Apple Bug?

Initialisierung ist wie folgt:

pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panRecognized:)]; 
[self addGestureRecognizer:pan]; 
[pan release]; 

Die Handhabung Funktion sieht wie folgt aus:

- (void)panRecognized:(UIPanGestureRecognizer *)gestureRecognizer { 
    switch ([gestureRecognizer state]) { 
     case UIGestureRecognizerStateBegan: 
      // fade some overlaying views out 
      break; 
     case UIGestureRecognizerStateEnded: 
     case UIGestureRecognizerStateCancelled: 
     case UIGestureRecognizerStateFailed: 
      // fade in the overlays 
      break; 
     default: 
      break; 
    } 

    // handle panning 
} 
+3

Dies ist mir in der Vergangenheit passiert, als ich versehentlich den Gestenerkenner entfernt/in eine andere Ansicht verschoben habe. Es wird einfach still werden, sobald Sie es tun. Dies ist in Ihrem Fall nicht der Fall? – Kalle

+0

Nicht sicher, was genau los ist, aber versuchen Sie, Statusänderungen zu protokollieren, indem Sie alle möglichen UIGestureRecognizerStates berücksichtigen, um zu sehen, was während der Interaktion passiert. –

+0

Ist mir auch passiert. Das Verschieben von 'uiview.addGestureRecognizer' aus den' viewDidLayoutSubviews' meines VCs nach 'viewWillAppear' löste dies, wobei immer noch nach einer Rechtfertigung gesucht wurde. – Jokester

Antwort

0

Die Linie

[self addGestureRecognizer: pan];

sieht für mich falsch aus.

Es scheint, als ob Sie die Gestenerkennung aus einer UIView und nicht aus einer UIViewController erstellen. Wenn also die Ansicht dealloc ist, werden sowohl sie als auch die Gestenerkennung verschwinden.

Besser, die Gestenerkenner aus der UIViewController zu erstellen. Auch die UIViewController muss einen starken Punkt auf den Erkenner halten.

Verwandte Themen