it-swarm.com.de

Bewährte Vorgehensweise für iPhone UIView Animation

Was wird als bewährte Methode zum Animieren von Ansichtsübergängen auf dem iPhone angesehen?

Das Beispielprojekt ViewTransitions von Apple verwendet Code wie folgt:

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

es gibt aber auch Code-Schnipsel im Netz, die so 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 ein Snippet zur Verfügung stellen könnten, wäre dies sehr willkommen.

ANMERKUNG: Ich konnte den zweiten Ansatz nicht richtig zum Laufen bringen.

142

Aus dem Abschnitt IView-Referenz über das beginAnimations:context: Methode:

Von der Verwendung dieser Methode wird in iPhone OS 4.0 und höher abgeraten. Sie sollten stattdessen die blockbasierten Animationsmethoden verwenden.

ZB blockbasierte Animation basierend auf Toms Kommentar

[UIView transitionWithView:mysuperview 
                  duration:0.75
                   options:UIViewAnimationTransitionFlipFromRight
                animations:^{ 
                    [myview removeFromSuperview]; 
                } 
                completion:nil];
118
Rafael Vega

Ich habe das letztere für viele nette leichte Animationen benutzt. Sie können es verwenden, um zwei Ansichten zu überblenden, eine vor einer anderen einzublenden oder auszublenden. Sie können eine Ansicht wie ein Banner über eine andere schießen, Sie können eine Ansicht strecken oder schrumpfen lassen ... Ich habe eine Menge Kilometer mit beginAnimation/commitAnimations zu tun.

Denken Sie nicht, dass Sie nur Folgendes tun können:

[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 Sie mit Alpha, Frames und sogar Größen einer Ansicht spielen. Herumspielen. Sie können mit seinen Fähigkeiten überrascht sein.

69
mahboudz

Der Unterschied scheint darin zu liegen, wie viel Kontrolle Sie über die Animation benötigen.

Der CATransition -Ansatz gibt Ihnen mehr Kontrolle und damit mehr Dinge zum Einrichten, z. die Zeitfunktion. Da es sich um ein Objekt handelt, können Sie es für einen späteren Zeitpunkt speichern und alle Ihre Animationen darauf richten, um doppelten Code usw. zu reduzieren.

Die Klassenmethoden UIView sind praktische Methoden für häufig verwendete Animationen, sind jedoch eingeschränkter als CATransition. Beispielsweise gibt es nur vier mögliche Übergangstypen (nach links drehen, nach rechts drehen, nach oben drehen, nach unten drehen). Wenn du ein Fade-In machen willst, musst du entweder auf CATransition's Überblendung oder eine explizite Animation des Alphas von UIView erstellen.

Beachten Sie, dass Sie unter Mac OS X mit CATransition einen beliebigen CoreImage -Filter angeben können, der als Übergang verwendet werden soll. Derzeit können Sie dies jedoch nicht auf dem iPhone ausführen, auf dem CoreImage.

52
Ryan McCuaig

Mit diesem einfachen Code können wir Bilder in iOS 5 animieren.

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!");
    }];
26
Guru

Lesen Sie in den UIView Dokumenten etwas über diese Funktion für ios4 +

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion
8
Chris

Jedenfalls wird die "Block" -Methode heutzutage bevorzugt. Ich werde den einfachen Block unten erklären.

Betrachten Sie das unten geschnippte. bug2 und bug 3 sind imageViews. Die folgende Animation beschreibt eine Animation mit einer Dauer von 1 Sekunde nach einer Verzögerung von 1 Sekunde. Der Bug3 wird von seiner Mitte in die Mitte von Bug2 verschoben. Sobald die Animation abgeschlossen ist, wird "Center Animation Done!" Protokolliert.

-(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 !!!

6
Deepukjayan

Ich habe in diesem Link ein gutes Tutorial gefunden. Hoffe, dass dies für jemanden hilfreich sein wird.

iview-animation-tutorial

4
Dilip Rajkumar

Hier ist Code für eine reibungslose Animation, die für viele Entwickler hilfreich sein kann.
Ich habe diesen Codeausschnitt aus diesem Tutorial gefunden.

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.
2
iPatel

lassen Sie uns versuchen, die Kasse für Swift 3 ...

UIView.transition(with: mysuperview, duration: 0.75, options:UIViewAnimationOptions.transitionFlipFromRight , animations: {
    myview.removeFromSuperview()
}, completion: nil)
2
Saurabh Sharma