Frage

Gibt es bekannte Probleme mit Geste Erkenner und die UIView Klasse Methoden für die Animation?

Ich habe Probleme mit einer Folge von Animationen auf einem UIImageView von UIGestureRecognizer Rückruf. Wenn die Folge von Animationen aus einem Standard-Callback wie TouchUpInside gestartet wird, funktioniert die Animation in Ordnung. Wenn er über die UILongPressGestureRecognizer gestartet wird, dann wird die erste Animation springt an das Ende und die zweite Animation beginnt sofort.

Hier ist ein Beispiel, das mein Problem darstellt. Im .xib für das Projekt habe ich eine UIImageView, die mit dem viewToMove IBOutlet verbunden ist. Ich habe auch einen UIButton mit dem Startbutton IBOutlet verbunden, und ich habe seine TouchUpInside Wirkung auf die startButtonClicked IBAction verbunden. Die TouchUpInside Aktion funktioniert, wie ich es will, aber die longPressGestureRecognizer springt zum Ende der ersten Animation nach etwa einer halben Sekunde. Als ich NSLog die zweite Animation (animateTo200) Ich kann sehen, dass es zweimal aufgerufen wird, wenn ein langer Druck die Animation beginnt aber erst einmal, wenn die TouchUpInside Aktion der Taste startet die Animation.

- (void)viewDidLoad {
[super viewDidLoad];

UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(startButtonClicked)];
NSArray *recognizerArray = [[NSArray alloc] initWithObjects:longPressRecognizer, nil];
[startButton setGestureRecognizers:recognizerArray];

[longPressRecognizer release];
[recognizerArray release];
}

-(IBAction)startButtonClicked {

if (viewToMove.center.x < 150) {
    [self animateTo200:@"Right to left" finished:nil context:nil];
} else {
    [self animateTo100:@"Right to left" finished:nil context:nil];
}
}

-(void)animateTo100:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
[UIView beginAnimations:@"Right to left" context:nil];
[UIView setAnimationDuration:4];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animateTo200:finished:context:)];
viewToMove.center = CGPointMake(100.0, 100.0);
[UIView commitAnimations];          
}

-(void)animateTo200:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
[UIView beginAnimations:@"Left to right" context:nil];
[UIView setAnimationDuration:4];
viewToMove.center = CGPointMake(200.0, 200.0);
[UIView commitAnimations];          
}
War es hilfreich?

Lösung

Sie sollten die Unterschrift von startButtonClicked zu - (void)startButtonClicked:(UIGestureRegognizer *)gestureRecognizer ändern und Abfrage dann das state Eigenschaft Gestenerkenner in dem Verfahren. Die Gestenerkenner wird seine Aktion Methode mehrfach mit unterschiedlichen Zuständen nennen (z UIGestureRecognizerStateBegan und UIGestureRecognizerStateEnded).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top