Animation beenden nach der Ausführung

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

  • Animation beenden nach der Ausführung

    Mahlzeit,

    ich habe einen Drop down Funktion mit einem ScrollView.
    Nach dem ich die Funktion bzw den Button drücke um die Fläche herunter zu fahren.
    Habe ich global in der App eine Animation zb beim Switch zwischen den einen Tabs.

    Hier ist mein Code:

    Quellcode

    1. - (void)openMenu:(id)sender {
    2. if (draw1 ==0) {
    3. draw1 = 1;
    4. NSLog(@"Start Animation");
    5. [UIView beginAnimations:nil context:nil];
    6. [UIView setAnimationDuration:0.5];
    7. [UIView setAnimationDelay:0.0];
    8. [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
    9. [UIButton beginAnimations:nil context:nil];
    10. [UIButton setAnimationDuration:0.5];
    11. [UIButton setAnimationDelay:0.0];
    12. [UIButton setAnimationCurve:UIViewAnimationCurveEaseOut];
    13. scrollView.frame = CGRectMake(0, 0, 700, 215);
    14. openMenu.frame = CGRectMake(150, 215, 23, 27);
    15. [self.view bringSubviewToFront:scrollView];
    16. [UIView commitAnimations];
    17. } else {
    18. draw1 = 0;
    19. [UIView beginAnimations:nil context:nil];
    20. [UIView setAnimationDuration:0.5];
    21. [UIView setAnimationDelay:0.0];
    22. [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
    23. [UIButton beginAnimations:nil context:nil];
    24. [UIButton setAnimationDuration:0.5];
    25. [UIButton setAnimationDelay:0.0];
    26. [UIButton setAnimationCurve:UIViewAnimationCurveEaseOut];
    27. scrollView.frame = CGRectMake(0,-300, 600, 320);
    28. openMenu.frame = CGRectMake(150, 20, 23, 27);
    29. [self.view bringSubviewToFront:scrollView];
    30. [UIView commitAnimations];
    31. NSLog(@"FinishAnimation");
    32. }
    33. }
    Alles anzeigen


    versucht habe ich es schon mit:

    Quellcode

    1. - (void)stopanimation{
    2. [self.view.layer removeAllAnimations];NSLog(@"FinishAllAmnimations");
    3. }



    Hoffe Ihr könnt mir weiterhelfen.

    Gruß
  • Ich würde Dir, wie von MCDan vorgeschlagen, auch die Verwendung von Block-basierten Animationen empfehlen. Damit vermeidest Du den Fehler, den Aufruf von commitAnimations zu vergessen. ;)

    Mit balancierten Begin- und Commit-Aufrufen sollte auch removeAllAnimations alle Animationen stoppen.
    „Meine Komplikation hatte eine Komplikation.“
  • Vielen Dank, habe es hinbekommen :)

    Quellcode

    1. - (void)btnAnimation:(BOOL)animated
    2. {
    3. [super viewDidAppear:animated];
    4. [UIView animateWithDuration:0.5
    5. delay:0.0
    6. options:UIViewAnimationCurveEaseOut
    7. animations:^{
    8. scrollView.frame = CGRectMake(0, 0, 700, 215);
    9. } completion:^(BOOL finished) {
    10. [btnAnimation removeFromSuperview];
    11. }];
    12. }
    Alles anzeigen



    Was genau ist den zu verschachteltet ?
    Der Code welchen ich oben gepostet habe ist besser nehme ich mal an.

    Gruß
  • luiZartZ schrieb:

    Was genau ist den zu verschachteltet ?

    Wir reden die ganze Zeit von diesem Code, oder? Darin befinden sich Aufrufe der Methode beginAnimations:context:, nicht wahr? Und zu jedem dieser Aufrufe muss es genau ein commitAnimations geben.

    luiZartZ schrieb:

    Der Code welchen ich oben gepostet habe ist besser nehme ich mal an.

    Welchen Code findest Du denn besser: Den langen fehlerhaften oder den kurzen funktionierenden?
    „Meine Komplikation hatte eine Komplikation.“
  • Der ist nicht verschachtelt.

    Da bekommt der Animationskontext 2x die gleiche Konfiguration, einmal über UIView und einmal über UIButton. Also passen die Commits schon ;)

    @luizarz

    Über die Klassenmethoden von UIView konfigurierst du das Verhalten der Animation, ab beginAnimations. Das geht immer über UIView. Das geht dann naturlich auch an jeder Subclass von UIView. Die Animationen weist du dann aber konkreten Objekten zu.
    Seminare, Artikel, Code. ObjectiveCeeds - alles für die Apfelzucht.
  • Manfred Kreß schrieb:

    Da bekommt der Animationskontext 2x die gleiche Konfiguration, einmal über UIView und einmal über UIButton. Also passen die Commits schon

    Himmi, Herrgott, Sakra!

    Da fehlt das Commit zu

    Quellcode

    1. [UIButton beginAnimations:nil context:nil];
    in beiden if-Zweigen. Die Begins pushen auf einen UIKit-internen Stack, und dadurch dürfte das ganze System ziemlich durcheinander kommen.

    @luiZartZ: Übrigens konfigurieren die beginAnimations:context:-commitAnimations:-Blöcke bzw. animateWithDuration:delay:options:animations:completion: nur die Animationen und führen sie nicht aus. Mehrere Blöcke zu verschachteln oder hintereinander zu reihen, macht also nur in sehr seltenen Fällen Sinn.
    „Meine Komplikation hatte eine Komplikation.“