iPhone UIView Animacja Best Practice

głosy
140

Co jest uważane za najlepsze praktyki dla animowanie widoku przejścia na iPhone?

Na przykład, ViewTransitionsprzykładowy projekt z jabłkiem używa kodu takich jak:

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

ale są też fragmenty kodu pływających wokół netto, które wyglądają tak:

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

Co jest najlepszym rozwiązaniem? Jeśli można dostarczyć także fragment Byłoby bardzo cenione.

UWAGA: byłem w stanie dostać się do drugiego podejścia do działa poprawnie.

Utwórz 10/03/2009 o 14:52
źródło użytkownik
W innych językach...                            


9 odpowiedzi

głosy
117

Od UIView odniesienia sekcji jest o beginAnimations:context:metodzie:

Zastosowanie tej metody jest zalecane w iPhone OS 4.0 lub nowszy. Zamiast tego należy użyć metody animacji opartej na bloku.

Np Blok animacji opartej na podstawie Toma komentarz

[UIView transitionWithView:mysuperview 
                  duration:0.75
                   options:UIViewAnimationTransitionFlipFromRight
                animations:^{ 
                    [myview removeFromSuperview]; 
                } 
                completion:nil];
Odpowiedział 09/08/2010 o 16:02
źródło użytkownik

głosy
69

Używam tego ostatniego za dużo ładnych lekkich animacji. Można go używać płynne przejście dwa widoki, lub znikają w jeden przed drugim, albo znikną go. Można strzelać widok nad innym jak baner, można dokonać widok rozciągnięcie lub kurczyć ... Dostaję dużo przebieg z beginAnimation/ commitAnimations.

Nie myśl, że wszystko można zrobić, to:

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

Oto przykład:

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

Jak widać, można grać z alfa, ramki, a nawet wielkości widoku. Bawić. Możesz być zaskoczony jego możliwościami.

Odpowiedział 04/05/2009 o 09:22
źródło użytkownik

głosy
52

Różnica wydaje się być ilość kontroli trzeba nad animacją.

CATransitionPodejście daje większą kontrolę, a zatem bardziej rzeczy skonfigurować, np. Funkcja rozrządu. Jako obiekt, można zapisać go na później, byłaby wskazać wszystkie animacje na to, aby zmniejszyć kod powielanie, itp

Te UIViewmetody są metodami klasy wygoda dla typowych animacji, ale są bardziej ograniczone niż CATransition. Na przykład, są tylko cztery możliwe typy transformacji (obrócić w lewo, w prawej klapki, zwija się, zawinięte w dół). Jeśli chciał zrobić Fade In, musiałbyś albo kopać dół CATransition'sznikną przejścia lub założyć wyraźny animację swojego UIView„s alfa.

Należy pamiętać, że CATransitionw systemie Mac OS X pozwoli Ci określić dowolny CoreImagefiltr do wykorzystania jako przejście, ale jak stoi teraz nie można tego zrobić na iPhone, którego brakuje CoreImage.

Odpowiedział 10/03/2009 o 16:24
źródło użytkownik

głosy
26

Możemy animowania obrazów w iOS 5 za pomocą tego prostego kodu.

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!");
    }];
Odpowiedział 20/01/2012 o 10:10
źródło użytkownik

głosy
8

W UIViewDokumentach masz przeczytać o tej funkcji dla iOS4 +

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion
Odpowiedział 11/10/2011 o 11:19
źródło użytkownik

głosy
6

W każdym razie „Block” metoda jest preferowany teraz-dni. opiszę prosty blok poniżej.

Rozważmy snipped poniżej. bug2 i bug 3 są imageViews. Animacja poniżej opisano animację z czas trwania 1 sekunda po upływie 1 sekundy. Bug3 jest przesuwany od środka do środka bug2 użytkownika. Gdy animacja jest zakończona zostanie zalogowany „Centrum Animacji Gotowe!”.

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

Nadzieję, że to czysty !!!

Odpowiedział 08/03/2012 o 05:12
źródło użytkownik

głosy
4

Znalazłem dobre wprowadzenie w ten link. Nadzieję, że to będzie pomocne dla kogoś.

UIView-animacja-tutorial

Odpowiedział 05/10/2012 o 08:08
źródło użytkownik

głosy
2

Oto kod do płynnej animacji, może być pomocne dla wielu programistów.
Znalazłem ten fragment kodu z tego podręcznika.

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.
Odpowiedział 03/07/2013 o 08:19
źródło użytkownik

głosy
1

Zróbmy spróbować Checkout dla Swift 3 ...

UIView.transition(with: mysuperview, duration: 0.75, options:UIViewAnimationOptions.transitionFlipFromRight , animations: {
    myview.removeFromSuperview()
}, completion: nil)
Odpowiedział 15/03/2017 o 12:50
źródło użytkownik

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