Rectangle 27 1

ios iPhone UIView Animation Best Practice?


Also note that CoreImage is now available as of iOS 5, but only a few of its features. I believe you can use a CoreImage transition in an animation, but you can't make custom CoreImage filters on iOS (5).

Note that CATransition on Mac OS X will let you specify an arbitrary CoreImage filter to use as a transition, but as it stands now you can't do this on the iPhone, which lacks CoreImage.

Note that this is iOS 2.0-era advice. See Rafael Vega's answer on block-based methods if you're on iOS 4.0 or up.

The CATransition approach gives you more control and therefore more things to set up, eg. the timing function. Being an object, you can store it for later, refactor to point all your animations at it to reduce duplicated code, etc.

The UIView class methods are convenience methods for common animations, but are more limited than CATransition. For example, there are only four possible transition types (flip left, flip right, curl up, curl down). If you wanted to do a fade in, you'd have to either dig down to CATransition's fade transition, or set up an explicit animation of your UIView's alpha.

The difference seems to be the amount of control you need over the animation.

Note
Rectangle 27 1

ios iPhone UIView Animation Best Practice?


[UIView transitionWithView:mysuperview 
                  duration:0.75
                   options:UIViewAnimationTransitionFlipFromRight
                animations:^{ 
                    [myview removeFromSuperview]; 
                } 
                completion:nil];
[UIView transitionWithView:mysuperview duration:0.75 options:UIViewAnimationTransitionFlipFromRight animations:^{ [myview removeFromSuperview]; } completion:nil]
beginAnimations:context:

Eg of Block-based Animation based on Tom's Comment

@Steven N, no, it means to use the block-based animations on UIView instead. They're essentially the same as beginAnimations and friends, but use block/closure features.

Except if you want to support 3.1.3 phones. Then don't use blocks.

So.. to be clear, that means use the first approach (CATransition), not the second?

Use of this method is discouraged in iPhone OS 4.0 and later. You should use the block-based animation methods instead.

Yes, it is the first approach (CATransition).

Note
Rectangle 27 1

ios iPhone UIView Animation Best Practice?


+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion

In the UIView docs, have a read about this function for ios4+

Note
Rectangle 27 1

ios iPhone UIView Animation Best Practice?


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

We can animate images in ios 5 using this simple code.

this is available in iOS 4 as well and is referred to as a "block based" animation. It is not restricted to iOS 5 and later.

Note
Rectangle 27 1

ios iPhone UIView Animation Best Practice?


[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];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:myview cache:YES];

As you can see, you can play with alpha, frames, and even sizes of a view. Play around. You may be surprised with its capabilities.

Don't think that all you can do is:

I have been using the latter for a lot of nice lightweight animations. You can use it crossfade two views, or fade one in in front of another, or fade it out. You can shoot a view over another like a banner, you can make a view stretch or shrink... I'm getting a lot of mileage out of beginAnimation/commitAnimations.

Note
Rectangle 27 1

ios iPhone UIView Animation Best Practice?


UIView.transition(with: mysuperview, duration: 0.75, options:UIViewAnimationOptions.transitionFlipFromRight , animations: {

        myview.removeFromSuperview()
    }, completion: nil)
Note
Rectangle 27 1

ios iPhone UIView Animation Best Practice?


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.
Note
Rectangle 27 1

ios iPhone UIView Animation Best Practice?


I found a good tutorial in this link. Hope this will be helpful for some one.

Note
Rectangle 27 1

ios iPhone UIView Animation Best Practice?


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

Anyway the "Block" method is preffered now-a-days. I will explain the simple block below.

Consider the snipped below. bug2 and bug 3 are imageViews. The below animation describes an animation with 1 second duration after a delay of 1 second. The bug3 is moved from its center to bug2's center. Once the animation is completed it will be logged "Center Animation Done!".

oopss!! thats a typo buddies. Updated now.

you assigned the CGPoint bug3.center to bug3Center and just after that you assign the CGPoint bug2.center to the same variable bug3Center ? Why are you doing that ?

Note