Langsame Vergrößerung des neuen Views bei addSubView

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

  • Langsame Vergrößerung des neuen Views bei addSubView

    Hallo zusammen,

    ich mache meine ersten Schritte mit der iPhone Programmierung und bekomme gerade nicht die Animation hin, die ich beim Hinzufügen eines Animation beim Hinzufügen eines Subviews gerne hätte. Ich möchte den neuen Subview langsam "hereinzoomen". Eigentlich so wie es standardmässig gemacht wird, nur langsamer.
    Ich habe ein View-based Application Projekt und habe in meinem ViewController einen Button, der nun beim Drücken einen neuen View hinzufügen soll. Der neue View wird angezeigt und die unter setAnimationTransition eingestellte Animation auch angezeigt, jedoch habe ich keine zum langsamen hereinzoomen gefunden. Es würde mir auch reichen, die Default-Animation zu verlangsamen. Die sieht mir schon nach einem Hereinzommen aus.
    Das hinzufügen geht, die Animation aber leider nicht. So sieht mein Code aus:

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:redCardView cache:NO];
    [UIView setAnimationDuration:2.0];
    [self.view addSubview:redCardView];
    [UIView commitAnimations];

    Was mich bei meinem Code zusätzlich wundert ist, dass die FlipFromLeft Animation erst beim zweiten mal zu funktionieren scheint, d.h. beim ersten Drücken des Buttons wird die Animation nicht ausgeführt. Wird der View dann mit removeFromSuperView entfernt und die Methode nochmal aufgerufen, dann tut es.

    Hat jemand einen Tipp?

    Danke und schöne Grüße,
    Marcus
  • Vielleicht ist es einfacher, den View durch eine implizite Animation einzublenden. Dazu fügst Du den View zum Superview hinzu, so dass er außerhalb liegt. Dann startest Du die Animation, setzt über die Property frame die Endposition des Views und commitest die Animation. Damit sollte der gewünschte Effekt entstehen. Die Animationsdauer kannst Du natürlich wie gewohnt setzen.
    „Meine Komplikation hatte eine Komplikation.“
  • Vielen Dank. Das war ein guter Tipp! Ich habe auf Basis deines Hinweises noch etwas rumprobiert und jetzt eine Lösung hinbekommen. Die möchte ich hier auch mal präsentieren:

    CGRect buttonFrame = [button frame]; //damit hole ich mir die Koordinaten und Abmessungen des Buttons, von ihm aus wird der Zoom Vorgang gestartet
    [myView setFrame:buttonFrame];
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:0.5];
    CGRect contentViewFrame = [contentView frame]; //holt die Abmessungen des ContentViews
    contentViewFrame.origin.x = 0.0f;
    contentViewFrame.origin.y = 0.0f;
    [myView setFrame:contentViewFrame]; //setzt die Maße und Koordinaten von myView auf die komplette Displaygröße
    [self.view addSubview:myView]; //fügt den View schließlich hinzu
    [UIView commitAnimations];

    Was ich noch nicht ganz verstehe ist, warum die Origin bei meinem ContentView nicht x=0f und y=0f ist, sondern ich das setzten muss, damit keine Lücke zwischen Statusbar und hinzugefügten View entsteht. Aber gut, damit kann ich leben ...
  • Ok, sorry. Mit Code-Tags ist es übersichtlicher, stimmt. Werde mich zukünftig daran halten.
    Wenn ich die Zeilen:

    Quellcode

    1. [myView setFrame:contentViewFrame];
    2. [self.view addSubview:myView];

    vor dem:

    Quellcode

    1. [UIView beginAnimations:nil context:nil];

    einfüge, dann tut es leider nicht so, wie ich mir das vorgestellt habe. Ich wollte die Vergrößerung als Animation nutzen, und daher habe ich sie innerhalb des Animationsblocks untergebracht.

    Danke und schöne Grüße