kein Touch solange Animation noch läuft

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • kein Touch solange Animation noch läuft

    Hallo,
    ich erzeuge mir wie folgt eine Animation:

    Quellcode

    1. [UIView beginAnimations:[NSString stringWithFormat:@"selectValueAnimated"] context:nil];
    2. [UIView setAnimationDelegate:self];
    3. [UIView setAnimationDuration:0.5];
    4. [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    5. [UIView setAnimationDidStopSelector:@selector(reloadTables)];
    6. ...
    7. [UIView commitAnimations];

    Diese wird ausgeführt, sobald ein touch auf ein Button erfolgt.

    Mein Problem ist jetzt, das Verhalten der App, wenn der User nach dem Touch auf ein weiteres Button tippt, während die Animation noch läuft. In diesem Fall wird die 2te Animation nicht korrekt ausgeführt.

    Gibr es eine Möglichkeit alle touchevents zu unterbinden, solange eine Animation läuft? Oder, was noch besser wäre, die zweite Animation erst nach dem Beenden der ersten auszuführen?

    Danke
  • pool338 schrieb:

    @matz:
    Danke, dass hatte ich in der Doku auhc gesehen. Habe aber nicht so recht verstanden, was ich in den "completion" Bereich schreiben soll. Denn wenn ich die erste Animation starte, weiss ich weder, ob eine 2te gestartetrt wird und wenn ja, welche.

    Dann schreibe den Code, der das entscheidet, in den Completion-Block.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Natürlich entscheidest du das, weil es dein Code ist, der die Animation startet. Der User programmiert ja nicht in deiner App.

    Wie der Code für die Entscheidung aussieht, musst schon du wissen. Ich kann es genau so wenig wissen wie der User. Aber vielleciht merkst du es dir einfach bei einem Buttonklick in einem Array?
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Du könntest eine BOOL-Variable buttonClicked nehmen, diese initial auf NO setzen.

    Beim Klick auf den Button setzt du sie dann auf YES.

    Dann prüfst du im completion-Block deine Variable:

    Quellcode

    1. if (buttonClicked)
    2. {
    3. // nächste Animation
    4. buttonClicked = NO;
    5. }



    Oder wenns mehrere sein sollen kannst du sie wie Amin schon schrieb in einem Array merken.

    Dann kannst du anhand der Anzahl der Einträge im Array, die Anzahl der folgenden Animationen steuern.
  • pool338 schrieb:

    @matz: Richtig...aber ich weiss grad nicht wie.

    Hatte ich doch gesagt:

    Quellcode

    1. completion:^(BOOL finished)
    2. {
    3. // if( [self.animationsToDo count] > 0 )
    4. {
    5. nextAnimation = self.animationsToDo[0];
    6. [self removeAnimation:nextAnimation];
    7. // fertig, start der 2. Animation
    8. }
    9. }];
    10. - (void)addAnimationAfterButtonClick
    11. {
    12. [self addAnimation:…];
    13. }
    Alles anzeigen
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • pool338 schrieb:

    Kann ich nciht global alle touch events abfangen, solange bis die aktuelle animation fertig ist?
    Ich hab das bei mir mit der option UIViewAnimationOptionAllowUserInteraction gemacht



    Quellcode

    1. [UIView animateWithDuration:1.5f delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
    2. [finishImage setAlpha:1.0f];
    3. }
    4. completion:^(BOOL finished){
    5. [UIView animateWithDuration:10.0f delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
    6. [finishImage setAlpha:0.0f];
    7. } completion:^(BOOL finished){}
    8. ];
    9. } ];