iPhone UIView Animasjon Best Practice

stemmer
141

Hva er ansett som beste praksis for å animere vise overganger på iPhone?

For eksempel ViewTransitionsprøve prosjekt fra apple bruker kode som:

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

men det er også kodebiter som flyter rundt på nettet som ser slik ut:

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

Hva er den beste måten? Hvis du kunne gi et tekstutdrag samt det ville være mye verdsatt.

MERK: Jeg har ikke vært i stand til å få den andre tilnærmingen skal fungere korrekt.

Publisert på 10/03/2009 klokken 13:52
kilden bruker
På andre språk...                            


9 svar

stemmer
118

Fra UIView referanse 's seksjon om beginAnimations:context:metoden:

Bruk av denne metoden er motet i iPhone OS 4.0 og nyere. Du bør bruke blokkbaserte animasjons metoder i stedet.

Eg av Block-basert animasjon basert på Tom kommentar

[UIView transitionWithView:mysuperview 
                  duration:0.75
                   options:UIViewAnimationTransitionFlipFromRight
                animations:^{ 
                    [myview removeFromSuperview]; 
                } 
                completion:nil];
Svarte 09/08/2010 kl. 15:02
kilden bruker

stemmer
69

Jeg har brukt den siste for mange fine lette animasjoner. Du kan bruke den crossfade to visninger, eller visne en i foran en annen, eller fade den ut. Du kan ta en utsikt over en annen som et banner, kan du lage en visning strekke eller krympe ... Jeg får mye av kjørelengde ut av beginAnimation/ commitAnimations.

Tro ikke at alt du kan gjøre er:

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

Her er et eksempel:

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

Som du ser, kan du spille med alfa, rammer, og selv størrelser av en visning. Leke rundt. Du kan bli overrasket med sine evner.

Svarte 04/05/2009 kl. 08:22
kilden bruker

stemmer
52

Forskjellen synes å være hvor mye kontroll du trenger over animasjonen.

Den CATransitiontilnærmingen gir deg mer kontroll og derfor flere ting å sette opp, f.eks. timingen funksjon. Å være et objekt, kan du lagre den til senere, refactor å påpeke alle animasjoner på det å redusere duplisert kode, etc.

De UIViewklassemetoder er convenience metoder for vanlige animasjoner, men er mer begrenset enn CATransition. For eksempel, er det bare fire mulige overgangstype (flip venstre, flip rett, krølle seg, bøye ned). Hvis du ønsket å gjøre en fade inn, vil du være nødt til å enten grave ned til CATransition'sfalme overgang, eller sette opp en eksplisitt animasjon av UIView's alpha.

Legg merke til at CATransitionpå Mac OS X lar deg angi en vilkårlig CoreImagefilter for å bruke som en overgang, men som det står nå kan du ikke gjøre dette på iPhone, som mangler CoreImage.

Svarte 10/03/2009 kl. 15:24
kilden bruker

stemmer
26

Vi kan animere bilder i iOS 5 ved hjelp av denne enkle koden.

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!");
    }];
Svarte 20/01/2012 kl. 09:10
kilden bruker

stemmer
8

I UIViewdokumenter, har en lese om denne funksjonen for iOS4 +

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion
Svarte 11/10/2011 kl. 10:19
kilden bruker

stemmer
6

Uansett "Block" metoden er preffered nå-a-dager. Jeg vil forklare den enkle blokken nedenfor.

Tenk klippet nedenfor. bug2 og bug 3 er imageViews. Den nedenfor animasjon beskriver en animasjon med 1 sekunds varighet etter en forsinkelse på ett sekund. Den bug3 er flyttet fra midten til bug2 sentrum. Når animasjonen er ferdig vil det være logget inn for "Center Animation Ferdig!".

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

Håper det er rent !!!

Svarte 08/03/2012 kl. 04:12
kilden bruker

stemmer
4

Jeg fant en god tutorial på denne linken. Håper dette vil være nyttig for noen.

UIView-animasjon-opplæringen

Svarte 05/10/2012 kl. 07:08
kilden bruker

stemmer
2

la oss prøve og kassa For Swift tre ...

UIView.transition(with: mysuperview, duration: 0.75, options:UIViewAnimationOptions.transitionFlipFromRight , animations: {
    myview.removeFromSuperview()
}, completion: nil)
Svarte 15/03/2017 kl. 12:50
kilden bruker

stemmer
2

Her er koden for jevn animasjon, kan være nyttig for mange utviklere.
Jeg fant denne kodebit fra denne opplæringen.

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.
Svarte 03/07/2013 kl. 07:19
kilden bruker

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