什么是iPhone OS 4.0中基于块的动画方法?

时间:2010-06-27 08:32:48

标签: iphone ios4 uiview core-animation

我正在尝试使用iPhone OS 4.0(iOS4?)SDK实现游戏。在以前版本的SDK中,我一直在使用[UIView beginAnimations:context:]和[UIView commitAnimations]来创建一些动画。但是,当我查看4.0中函数的文档时,我看到了这条评论。

  

不鼓励使用此方法   iPhone OS 4.0及更高版本。你应该   使用基于块的动画方法   代替。

你可以在这里找到它: http://developer.apple.com/iphone/library/documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/clm/UIView/commitAnimations

我的问题是,iPhone OS 4.0中基于块的动画是什么?我虽然使用beginAnimations:context:和commitAnimations函数来创建动画块..

3 个答案:

答案 0 :(得分:117)

我在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){
                            ;
                        }];

            }];

以上代码将在2秒动画中为UIImageView *(图标)设置动画。完成后,另一个动画会将图标移回原位。

答案 1 :(得分:42)

如果您按照该链接向上滚动一下,您将看到ios4新增的动画方法。

animateWithDuration:animations:
animateWithDuration:animations:completion:
animateWithDuration:delay:options:animations:completion:

还有一些相关的过渡方法。对于其中的每一个,动画参数都是block object

  

动画
  包含的块对象   提交视图的更改。   这是您以编程方式进行的   改变任何可动画的属性   视图层次结构中的视图。这个   块没有参数,没有参数   回报价值。此参数不得   是NULL。

Block objectsConcurrent Programming

的一部分

答案 2 :(得分:20)

这是一个非常简单的例子。代码只是淡出UIView并在动画完成后隐藏它:

[UIView animateWithDuration:1.0 
                      delay:0.0 
                    options:UIViewAnimationOptionCurveEaseInOut 
                 animations:^ {
                     bgDisplay.alpha = 0.0;
                 } 
                 completion:^(BOOL finished) {
                     bgDisplay.hidden = YES;
                 }];

或采用不同的格式:

[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^ {
    bgDisplay.alpha = 0.0;
} completion:^(BOOL finished) {
    bgDisplay.hidden = YES;
}];