web-dev-qa-db-ja.com

iPhone OS 4.0のブロックベースのアニメーション方法とは何ですか?

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関数がアニメーションブロックを作成するために使用されたと思います。

55
kkrizka

そのリンクをたどって少し上にスクロールすると、ios4の新しいアニメーションメソッドが表示されます。

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

関連する移行方法もいくつかあります。これらのそれぞれについて、アニメーション引数は ブロックオブジェクト です。

アニメーション
ビューにコミットする変更を含むブロックオブジェクト。これは、ビュー階層内のビューのアニメート可能なプロパティをプログラムで変更する場所です。このブロックにはパラメーターがなく、戻り値もありません。このパラメーターはNULLであってはなりません。

ブロックオブジェクト同時プログラミング の一部です

42
drawnonward

ブログ に例を投稿しました:

    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 *(アイコン)をアニメーション化します。完了すると、別のアニメーションがアイコンを元の位置に戻します。

117
ohho

これは非常に簡単な例です。コードは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;
}];
20
cldrr