iPhone UIView animation les meilleures pratiques

voix
140

Ce qui est considéré les meilleures pratiques pour l'animation vue des transitions sur l'iPhone?

Par exemple, le ViewTransitionsprojet exemple de la pomme utilise le code comme:

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

mais il y a aussi des extraits de code flottant autour du filet qui ressemblent à ceci:

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

Quelle est la meilleure approche? Si vous pouvez fournir un extrait et ce serait très apprécié.

NOTE: Je suis incapable d'obtenir la deuxième approche fonctionne correctement.

Créé 10/03/2009 à 14:52
source utilisateur
Dans d'autres langues...                            


9 réponses

voix
117

De la référence UIView section d » au sujet de la beginAnimations:context:méthode:

L'utilisation de cette méthode est déconseillée dans l'iPhone OS 4.0 et versions ultérieures. Vous devez utiliser les méthodes d'animation à base de blocs à la place.

Par exemple, de l'animation à base de bloc basé sur le commentaire de Tom

[UIView transitionWithView:mysuperview 
                  duration:0.75
                   options:UIViewAnimationTransitionFlipFromRight
                animations:^{ 
                    [myview removeFromSuperview]; 
                } 
                completion:nil];
Créé 09/08/2010 à 16:02
source utilisateur

voix
69

J'utilise ce dernier pour beaucoup de belles animations légères. Vous pouvez l' utiliser deux vues fondu enchaîné ou Fondu un en face d' une autre, ou fade out. Vous pouvez tirer une vue sur une autre comme une bannière, vous pouvez faire une étirées ou rétrécies vue ... Je reçois beaucoup de kilométrage de beginAnimation/ commitAnimations.

Ne pensez pas que vous pouvez faire tout est:

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

Voici un exemple:

[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];

Comme vous pouvez le voir, vous pouvez jouer avec alpha, cadres et tailles même d'une vue. S'amuser. Vous pourriez être surpris par ses capacités.

Créé 04/05/2009 à 09:22
source utilisateur

voix
52

La différence semble être la quantité de contrôle dont vous avez besoin sur l'animation.

L' CATransitionapproche vous donne plus de contrôle et donc plus de choses à mettre en place, par exemple. la fonction de synchronisation. Être un objet, vous pouvez l' enregistrer pour plus tard, refactoring pour pointer toutes vos animations à pour réduire le code dupliquée, etc.

Les UIViewméthodes de classe sont des méthodes pratiques pour des animations communes, mais sont plus limités que CATransition. Par exemple, il y a seulement quatre types de transition possibles (flip, flip gauche à droite, se recroquevillent, courbe vers le bas). Si vous vouliez faire un fondu, il faudrait soit creuser pour CATransition'sestomper la transition, ou mettre en place une animation explicite de votre UIView« alpha s.

Notez que CATransitionsous Mac OS X vous permet de spécifier un quelconque CoreImagefiltre à utiliser comme une transition, mais tel qu'il est maintenant , vous ne pouvez pas le faire sur l'iPhone, ce qui manque CoreImage.

Créé 10/03/2009 à 16:24
source utilisateur

voix
26

Nous pouvons animer des images dans ios 5 en utilisant ce code simple.

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!");
    }];
Créé 20/01/2012 à 10:10
source utilisateur

voix
8

Dans les UIViewdocuments, ont une lecture de cette fonction pour iOS4 +

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion
Créé 11/10/2011 à 11:19
source utilisateur

voix
6

Quoi qu'il en soit la méthode « Block » est preffered maintenant jours-. Je vais vous expliquer le simple bloc ci-dessous.

Considérons le snipped ci-dessous. BUG2 et bug 3 sont imageViews. L'animation ci-dessous décrit une animation avec 1 seconde durée après un délai de 1 seconde. Le bug3 est déplacé de son centre au centre de BUG2. Une fois l'animation terminée, il sera connecté « Terminé Centre d'animation! ».

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

Espérons que est propre !!!

Créé 08/03/2012 à 05:12
source utilisateur

voix
4

J'ai trouvé un bon tutoriel dans ce lien. Espérons que cela sera utile pour quelqu'un.

UIView-animation tutoriel

Créé 05/10/2012 à 08:08
source utilisateur

voix
2

Voici le code pour l' animation en douceur, peut être utile pour de nombreux développeurs.
J'ai trouvé ce bout de code de ce tutoriel.

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.
Créé 03/07/2013 à 08:19
source utilisateur

voix
1

nous allons faire et essayer votre commande pour Swift 3 ...

UIView.transition(with: mysuperview, duration: 0.75, options:UIViewAnimationOptions.transitionFlipFromRight , animations: {
    myview.removeFromSuperview()
}, completion: nil)
Créé 15/03/2017 à 12:50
source utilisateur

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