iPhone UIView Animace Best Practice

hlasů
140

Co je považováno za nejlepší praxe pro animování přechodů zobrazení na iPhone?

Například ViewTransitionsukázkový projekt od Apple používá kód, jako je:

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

ale jsou zde i kousky kódu plovoucí kolem sítě, které vypadají takto:

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

Jaký je nejlepší přístup? Pokud byste mohli poskytnout fragment stejně, že by se moc líbí.

Poznámka: Byl jsem schopen se dostat na druhý přístup pracovat správně.

Položena 10/03/2009 v 14:52
zdroj uživatelem
V jiných jazycích...                            


9 odpovědí

hlasů
117

Z UIView referenční je část o beginAnimations:context:metodu:

Použití této metody je znechucený v iPhone OS 4.0 a novější. místo toho byste měli použít metody animace založené na blocích.

Např of Block založené animace založené na Tomovu komentář

[UIView transitionWithView:mysuperview 
                  duration:0.75
                   options:UIViewAnimationTransitionFlipFromRight
                animations:^{ 
                    [myview removeFromSuperview]; 
                } 
                completion:nil];
Odpovězeno 09/08/2010 v 16:02
zdroj uživatelem

hlasů
69

Byl jsem pomocí druhý pro spoustu pěkných lehkých animací. Můžete ji použít prolínání dva pohledy, nebo fade jednu v před druhou, nebo fade to. Můžete natáčet výhled na další jako prapor, můžete vytvořit úsek zobrazení nebo zmenšit ... Začínám hodně najetých kilometrů z beginAnimation/ commitAnimations.

Nemyslete si, že vše, co můžete udělat, je:

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

Zde je ukázka:

[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 vidíte, můžete si hrát s alfa, počet snímků a dokonce i velikosti zobrazení. Pohrát. Možná budete překvapeni, s jeho schopnostmi.

Odpovězeno 04/05/2009 v 09:22
zdroj uživatelem

hlasů
52

Rozdíl se zdá být na míru kontroly, budete potřebovat více než animace.

CATransitionPřístup poskytuje větší kontrolu a tím více věcí nastavení, např. funkce časování. Být objekt, můžete jej uložit pro pozdější použití, refactor upozornit všechny animace na to snížit duplicitní kód, atd.

Tyto UIViewmetody třídy jsou výhodné metody pro běžné animace, ale jsou omezenější než CATransition. Například existují pouze čtyři možné typy přechodových (překlopit vlevo, vpravo klopné, zkroutit, stočit dolů). Pokud byste chtěli udělat fade in, měli byste buď kopat až do CATransition'sfade přechodu, nebo nastavit explicitní animaci svého UIView‚s alfa.

Všimněte si, že CATransitionna Mac OS X vám umožní zadat libovolný CoreImagefiltr, který chcete použít jako přechod, ale jak to stojí nyní, můžete to udělat na iPhone, který postrádá CoreImage.

Odpovězeno 10/03/2009 v 16:24
zdroj uživatelem

hlasů
26

Můžeme animovat obrázků v iOS 5 s použitím tohoto jednoduchého kódu.

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!");
    }];
Odpovězeno 20/01/2012 v 10:10
zdroj uživatelem

hlasů
8

V UIViewdokumentů, které ke čtení o této funkci pro iOS4 +

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion
Odpovězeno 11/10/2011 v 11:19
zdroj uživatelem

hlasů
6

V každém případě tato metoda „Block“ je preferována nyní-- dny. Vysvětlím níže jednoduchý blok.

Vezměme si pod pfetrhlo. bug2 a bug 3 jsou imageViews. Níže animace popisuje animaci s 1 sekundy trvání po prodlevě 1 sekundy. Bug3 se přesune ze svého středu do středu bug2 je. Jakmile je animace dokončena, bude zaznamenána „Hotovo Center 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!");
                 }];
}

Doufáme, že to čisté !!!

Odpovězeno 08/03/2012 v 05:12
zdroj uživatelem

hlasů
4

Zjistil jsem dobrý návod v tomto odkazu. Doufám, že to bude užitečné pro někoho.

UIView-animace-tutorial

Odpovězeno 05/10/2012 v 08:08
zdroj uživatelem

hlasů
2

Zde je kód pro plynulé animace, by mohly být užitečné pro mnoho vývojářů.
Našel jsem tento fragment kódu z tohoto výukového programu.

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.
Odpovězeno 03/07/2013 v 08:19
zdroj uživatelem

hlasů
1

pojďme se pokusit Checkout pro Swift 3 ...

UIView.transition(with: mysuperview, duration: 0.75, options:UIViewAnimationOptions.transitionFlipFromRight , animations: {
    myview.removeFromSuperview()
}, completion: nil)
Odpovězeno 15/03/2017 v 12:50
zdroj uživatelem

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