iPhone UIView Animation, Best Practice

stimmen
140

Was gilt als Best-Practice-Ansicht Übergänge auf dem iPhone zum Animieren?

Zum Beispiel kann das ViewTransitionsverwendete Beispielprojekt aus Apfel Code wie:

CATransition *applicationLoadViewIn = [CATransition animation];
[applicationLoadViewIn setDuration:1];
[applicationLoadViewIn setType:kCATransitionReveal];
[applicationLoadViewIn setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
[[myview layer] addAnimation:applicationLoadViewIn forKey:kCATransitionReveal];

aber es gibt auch Schnipsel Code um das Netz schwimmend, die wie folgt aussehen:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.75];
[UIView setAnimationDelegate:self];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:myview cache:YES];
[myview removeFromSuperview];
[UIView commitAnimations];

Was ist der beste Ansatz? Wenn Sie auch einen Schnipsel bieten könnte es sehr geschätzt werden würde.

HINWEIS: Ich habe es nicht gelungen , den zweiten Ansatz zu bekommen richtig zu arbeiten.

Veröffentlicht am 10/03/2009 um 14:52
quelle vom benutzer
In anderen Sprachen...                            


9 antworten

stimmen
117

Von der UIView Referenz ‚s Abschnitt über das beginAnimations:context:Verfahren:

Die Verwendung dieses Verfahrens wird in iPhone OS 4.0 und später abgeraten. Sie sollten stattdessen die blockbasierte Animationsmethoden verwenden.

ZB von blockbasierte Animation, basierend auf Tom Kommentar

[UIView transitionWithView:mysuperview 
                  duration:0.75
                   options:UIViewAnimationTransitionFlipFromRight
                animations:^{ 
                    [myview removeFromSuperview]; 
                } 
                completion:nil];
Beantwortet am 09/08/2010 um 16:02
quelle vom benutzer

stimmen
69

Ich habe viele schöne leichte Animationen letztere im Einsatz. Sie können es zwei Ansichten blenden verwenden oder verblassen ein in vor dem anderen, oder sie auszublenden. Sie können einen Blick auf andere wie ein Banner schießen, können Sie einen Blick Strecke machen oder schrumpfen ... Ich bin aus einer Menge Kilometer bekommen beginAnimation/ commitAnimations.

Denken Sie nicht, dass alles, was Sie tun können, ist:

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:myview cache:YES];

Hier ist ein Beispiel:

[UIView beginAnimations:nil context:NULL]; {
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationDelegate:self];
    if (movingViewIn) {
// after the animation is over, call afterAnimationProceedWithGame
//  to start the game
        [UIView setAnimationDidStopSelector:@selector(afterAnimationProceedWithGame)];

//      [UIView setAnimationRepeatCount:5.0]; // don't forget you can repeat an animation
//      [UIView setAnimationDelay:0.50];
//      [UIView setAnimationRepeatAutoreverses:YES];

        gameView.alpha = 1.0;
        topGameView.alpha = 1.0;
        viewrect1.origin.y = selfrect.size.height - (viewrect1.size.height);
        viewrect2.origin.y = -20;

        topGameView.alpha = 1.0;
    }
    else {
    // call putBackStatusBar after animation to restore the state after this animation
        [UIView setAnimationDidStopSelector:@selector(putBackStatusBar)];
        gameView.alpha = 0.0;
        topGameView.alpha = 0.0;
    }
    [gameView setFrame:viewrect1];
    [topGameView setFrame:viewrect2];

} [UIView commitAnimations];

Wie Sie sehen können, können Sie mit alpha, Rahmen und sogar Größen einer Ansicht spielen. Herumspielen. Sie können mit seinen Fähigkeiten überrascht sein.

Beantwortet am 04/05/2009 um 09:22
quelle vom benutzer

stimmen
52

Der Unterschied scheint die Menge der Kontrolle, die Sie über die Animation brauchen.

Der CATransitionAnsatz gibt Ihnen mehr Kontrolle und mehr Dinge also einzurichten, zum Beispiel. die Timing - Funktion. Ein Objekt zu sein, können Sie es speichern für später Refactoring es alle Ihre Animationen zeigen duplizierten Code zu reduzieren, usw.

Die UIViewKlassenmethoden sind bequeme Methoden für gemeinsame Animationen, sind aber geringer als CATransition. Zum Beispiel gibt es nur vier mögliche Übergangstypen (links kippen, drehen rechts, einrollen, curl unten). Wenn Sie einen Fade - in tun wollte, dann würden Sie haben entweder graben zu CATransition'sÜbergang zu verblassen oder eine explizite Animation Ihrer einrichten UIView‚s alpha.

Beachten Sie, dass CATransitionauf Mac OS X können Sie einen beliebigen angeben CoreImageFilter als Übergang zu verwenden, aber wie es jetzt steht man dies auf dem iPhone nicht tun kann, was fehlt CoreImage.

Beantwortet am 10/03/2009 um 16:24
quelle vom benutzer

stimmen
26

Wir können Bilder in ios animieren diesen einfachen Code 5 verwendet wird.

CGRect imageFrame = imageView.frame;
imageFrame.origin.y = self.view.bounds.size.height;

[UIView animateWithDuration:0.5
    delay:1.0
    options: UIViewAnimationCurveEaseOut
    animations:^{
        imageView.frame = imageFrame;
    } 
    completion:^(BOOL finished){
        NSLog(@"Done!");
    }];
Beantwortet am 20/01/2012 um 10:10
quelle vom benutzer

stimmen
8

In dem UIViewdocs hat über diese Funktion ein Lesen für iOS4 +

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion
Beantwortet am 11/10/2011 um 11:19
quelle vom benutzer

stimmen
6

Wie auch immer der „Block“ -Methode wird preffered jetzt-a-Tage. Ich werde den einfachen Block unten erklären.

Betrachten Sie die folgenden snipped. bug2 und Bug-3 sind imageViews. Die Animation unten beschreibt eine Animation mit 1 Sekunde Dauer nach einer Verzögerung von 1 Sekunde. Die bug3 wird von seinem Zentrum zu bug2 Zentrum bewegt. Sobald die Animation abgeschlossen ist, wird es „Zentrum Animation, Fertig!“ Angemeldet werden.

-(void)centerAnimation:(id)sender
{
NSLog(@"Center animation triggered!");
CGPoint bug2Center = bug2.center;

[UIView animateWithDuration:1
                      delay:1.0
                    options: UIViewAnimationCurveEaseOut
                 animations:^{
                     bug3.center = bug2Center;
                 } 
                 completion:^(BOOL finished){
                     NSLog(@"Center Animation Done!");
                 }];
}

Hoffe, das ist sauber !!!

Beantwortet am 08/03/2012 um 05:12
quelle vom benutzer

stimmen
4

Ich fand ein gutes Tutorial in diesem Link. Hoffe, dass dies für einige ein hilfreich sein wird.

uiview-Animation-Tutorial

Beantwortet am 05/10/2012 um 08:08
quelle vom benutzer

stimmen
2

Hier ist der Code für flüssige Animationen, könnte hilfreich sein für viele Entwickler.
Ich fand diesen Code - Snippet aus diesem Tutorial.

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[animation setAutoreverses:YES];
[animation setFromValue:[NSNumber numberWithFloat:1.3f]];
[animation setToValue:[NSNumber numberWithFloat:1.f]];
[animation setDuration:2.f];
[animation setRemovedOnCompletion:NO];

[animation setFillMode:kCAFillModeForwards];
[[self.myView layer] addAnimation:animation forKey:@"scale"];/// add here any Controller that you want t put Smooth animation.
Beantwortet am 03/07/2013 um 08:19
quelle vom benutzer

stimmen
1

Lassen Sie uns versuchen und Kasse für Swift 3 ...

UIView.transition(with: mysuperview, duration: 0.75, options:UIViewAnimationOptions.transitionFlipFromRight , animations: {
    myview.removeFromSuperview()
}, completion: nil)
Beantwortet am 15/03/2017 um 12:50
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more