Frage

Was wird als Best Practice angesehen, um Übergänge auf dem iPhone zu animieren?

Zum Beispiel die ViewTransitions Beispielprojekt von Apple verwendet Code wie:

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 Codeausschnitte 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 einen Ausschnitt bereitstellen könnten, wäre es sehr geschätzt.

HINWEIS: Ich konnte den zweiten Ansatz nicht richtig erstellen.

War es hilfreich?

Lösung

Von dem UIView ReferenzAbschnitt über die beginAnimations:context: Methode:

Die Verwendung dieser Methode wird in iPhone OS 4.0 und später entmutigt. 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];

Andere Tipps

Ich habe Letzteres für viele schöne leichte Animationen verwendet. Sie können es mit Crossfade zwei Ansichten verwenden oder einen vor einem anderen verblassen oder verblassen. Sie können einen Blick über ein anderes wie ein Banner schießen, Sie können einen Blick auf Stretch oder Schrumpfen machen ... Ich bekomme viel Kilometerleistung heraus beginAnimation/commitAnimations.

Denken Sie nicht, dass Sie nur alles 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, können Sie mit Alpha, Frames und sogar Größen einer Aussicht spielen. Herumspielen. Sie können von seinen Fähigkeiten überrascht sein.

Der Unterschied scheint die Kontrolle zu sein, die Sie über die Animation benötigen.

Das CATransition Der Ansatz gibt Ihnen mehr Kontrolle und damit mehr Dinge, z. die Zeitfunktion. Da Sie ein Objekt sind, können Sie es für später speichern, Refactor alle Ihre Animationen darauf verweisen, um den doppelten Code usw. zu reduzieren usw.

Das UIView Klassenmethoden sind Komfortmethoden für gemeinsame Animationen, aber begrenzter als CATransition. Beispielsweise gibt es nur vier mögliche Übergangstypen (links drehen, rechts drehen, sich hochkühlen, sich nach unten rollen). Wenn Sie ein Verblassen machen wollten CATransition's Übergang verblassen oder eine explizite Animation von Ihnen einrichten UIViewAlpha.

Beachten Sie, dass CATransition Mit Mac OS X können Sie ein willkürliches Angeben angeben CoreImage Filter als Übergang zum Nutzen, aber wie es jetzt aussieht, können Sie dies nicht auf dem iPhone tun, was fehlt CoreImage.

Wir können Bilder in iOS 5 mit diesem einfachen Code 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!");
    }];

In dem UIView Dokumente, lesen Sie über diese Funktion für iOS4+

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

Wie auch immer, die "Block" -Methode wird jetzt am Tag bevorzugt. Ich werde den einfachen Block unten erklären.

Betrachten Sie den unten stehenden Schnipsel. Bug2 und Bug 3 sind ImageViews. Die folgende Animation beschreibt eine Animation mit 1 Sekunde nach einer Verzögerung von 1 Sekunde. Der Bug3 wird von seinem Zentrum zum Zentrum von Bug2 verschoben. Sobald die Animation abgeschlossen ist, wird sie "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 !!!

Ich habe in diesem Link ein gutes Tutorial gefunden. Ich hoffe, das wird für jemanden hilfreich sein.

Uiview-Animation-Tutorial

Hier ist Code für reibungslose Animationen, könnte für viele Entwickler hilfreich sein.
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.

Lassen Sie uns versuchen, nach Swift 3 zu suchen ...

UIView.transition(with: mysuperview, duration: 0.75, options:UIViewAnimationOptions.transitionFlipFromRight , animations: {
    myview.removeFromSuperview()
}, completion: nil)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top