iPhone UIView Animation Best Practice

stemmen
140

Wat wordt beschouwd als best practice voor het animeren uitzicht overgangen op de iPhone?

Bijvoorbeeld, het ViewTransitionsmonster project van Apple maakt gebruik van code, zoals:

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

maar er zijn ook stukjes code zweven rond het net, dat er als volgt uitzien:

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

Wat is de beste aanpak? Als u een fragment zou kunnen bieden en zou het veel gewaardeerd worden.

LET OP: Ik ben niet in staat om de tweede benadering krijgen goed te laten werken geweest.

De vraag is gesteld op 10/03/2009 om 14:52
bron van user
In andere talen...                            


9 antwoorden

stemmen
117

Van de UIView referentie sectie is de beginAnimations:context:methode:

Het gebruik van deze methode wordt afgeraden in iPhone OS 4.0 en hoger. U moet de block-based animaties methoden te gebruiken.

Eg van Block-gebaseerde animatie gebaseerd op Tom's Opmerkingen

[UIView transitionWithView:mysuperview 
                  duration:0.75
                   options:UIViewAnimationTransitionFlipFromRight
                animations:^{ 
                    [myview removeFromSuperview]; 
                } 
                completion:nil];
antwoordde op 09/08/2010 om 16:02
bron van user

stemmen
69

Ik gebruik de laatste voor een heleboel leuke lichtgewicht animaties. U kunt het gebruiken faden twee weergaven, of fade een op de aan de voorkant van een ander, of fade it out. U kunt opnamen maken van een uitzicht over een ander als een banner, kunt u het oog stuk te maken of te verkleinen ... Ik krijg heel wat kilometers uit van beginAnimation/ commitAnimations.

Denk niet dat alles wat je kunt doen is:

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

Hier is een voorbeeld:

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

Zoals u kunt zien, kun je spelen met alpha, frames en zelfs maten van het oog. Het spel rond. U kunt worden verrast met de mogelijkheden zijn.

antwoordde op 04/05/2009 om 09:22
bron van user

stemmen
52

Het verschil lijkt de mate van controle die u nodig heeft over de animatie zijn.

De CATransitionaanpak geeft u meer controle en dus meer dingen op te zetten, bv. de tijdfunctie. Omdat het een object, kunt u deze op te slaan voor later, refactoren om al uw animaties te wijzen op het aan gedupliceerde code te verminderen, etc.

De UIViewmethoden van de klasse zijn gemak methoden voor gewone animaties, maar zijn beperkter dan CATransition. Zo zijn er slechts vier mogelijke overgangstypen (flip links, rechts draaien, krullen, krullen omlaag). Als je wilde een fade in te doen, zou je moet ofwel graven om CATransition'sde overgang vervagen, of het opzetten van een expliciete animatie van je UIView's alpha.

Merk op dat CATransitionop Mac OS X laat u een willekeurige opgeven CoreImagefilter te gebruiken als een overgang, maar zoals het er nu uitziet kun je niet doen op de iPhone, die ontbreekt CoreImage.

antwoordde op 10/03/2009 om 16:24
bron van user

stemmen
26

We kunnen beelden in ios animeren 5 met behulp van deze eenvoudige code.

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!");
    }];
antwoordde op 20/01/2012 om 10:10
bron van user

stemmen
8

In de UIViewdocumenten, hebben gelezen over deze functie voor iOS4 +

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion
antwoordde op 11/10/2011 om 11:19
bron van user

stemmen
6

Hoe dan ook de "Block" methode wordt Preffered nu-een-dag. Ik zal de eenvoudige blok hieronder uitleggen.

Beschouw de onderstaande geknipt. bug2 en bug 3 zijn imageViews. Onderstaande animatie beschrijft een animatie met 1 seconde tijdsduur na een vertraging van 1 seconde. De bug3 wordt verplaatst van het centrum tot centrum bug2's. Zodra de animatie is voltooid zal bewaard worden "Center Animation Klaar!".

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

Hoop dat is schoon !!!

antwoordde op 08/03/2012 om 05:12
bron van user

stemmen
4

Ik vond een goede tutorial in deze link. Hoop dat dit zal nuttig zijn voor iemand zijn.

UIView-animatie-les

antwoordde op 05/10/2012 om 08:08
bron van user

stemmen
2

Hier is code voor Smooth animatie, kan nuttig zijn voor veel ontwikkelaars.
Ik vond dit stukje code van deze 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.
antwoordde op 03/07/2013 om 08:19
bron van user

stemmen
1

Laten we proberen en kassa voor Swift 3 ...

UIView.transition(with: mysuperview, duration: 0.75, options:UIViewAnimationOptions.transitionFlipFromRight , animations: {
    myview.removeFromSuperview()
}, completion: nil)
antwoordde op 15/03/2017 om 12:50
bron van user

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