What are block-based animation methods in iPhone OS 4.0?
IphoneIos4UiviewCore AnimationIphone Problem Overview
I am trying to implement a game using the iPhone OS 4.0 (iOS4?) SDK. In the previous versions of the SDK, I've been using the [UIView beginAnimations:context:] and [UIView commitAnimations] to create some animations. However, when I look at the documentation of the functions in 4.0, I see this comment.
> Use of this method is discouraged in > iPhone OS 4.0 and later. You should > use the block-based animation methods > instead.
You can find it here: http://developer.apple.com/iphone/library/documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/clm/UIView/commitAnimations
My question is, what are block-based animations in iPhone OS 4.0? I though that the beginAnimations:context: and commitAnimations functions were used to create animation blocks..
Iphone Solutions
Solution 1 - Iphone
I have posted an example in my blog:
CGPoint originalCenter = icon.center;
[UIView animateWithDuration:2.0
animations:^{
CGPoint center = icon.center;
center.y += 60;
icon.center = center;
}
completion:^(BOOL finished){
[UIView animateWithDuration:2.0
animations:^{
icon.center = originalCenter;
}
completion:^(BOOL finished){
;
}];
}];
The above code will animate a UIImageView* (icon) in a 2-second animation. Once completed, another animation will move the icon back to it’s original position.
Solution 2 - Iphone
If you follow that link and scroll up a bit, you will see animate methods new to ios4.
animateWithDuration:animations:
animateWithDuration:animations:completion:
animateWithDuration:delay:options:animations:completion:
There are also some related transition methods. For each of these, the animations argument is a block object:
> animations
> A block object containing
> the changes to commit to the views.
> This is where you programmatically
> change any animatable properties of
> the views in your view hierarchy. This
> block takes no parameters and has no
> return value. This parameter must not
> be NULL.
Block objects are part of Concurrent Programming
Solution 3 - Iphone
Here's a very simple example. The code just fades out an UIView and hides it after the animation is done:
[UIView animateWithDuration:1.0
delay:0.0
options:UIViewAnimationOptionCurveEaseInOut
animations:^ {
bgDisplay.alpha = 0.0;
}
completion:^(BOOL finished) {
bgDisplay.hidden = YES;
}];
or in different formatting:
[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^ {
bgDisplay.alpha = 0.0;
} completion:^(BOOL finished) {
bgDisplay.hidden = YES;
}];