-2
[UIView animateWithDuration:1.0 animations:^(void) {
    im.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
    [UIView animateWithDuration:1.0 delay:1.0 options:UIViewAnimationCurveEaseOut animations:^(void) {
        im.alpha = 0.0;
    } completion:^(BOOL finished) {
        [im removeFromSuperview];
    }];    
}];

このコードはUIImageView、私が知っているアニメーション用です。この種の関数呼び出しは初めて見たことがないので、呼び出しメカニズムを知りたいです。

主に、^(void)、そしてなぜ im.transform = CGAffineTransformIdentity;それに渡されるのですか?

私はAppleのドキュメントを調べて、この関数呼び出しに関連するものを見つけました。私もそれを入手しましたが、そこからは何もわかりませんでした。または私は間違ったセクションに行った可能性があります。

ここの誰かが私をこれに導くことができますか?

4

1 に答える 1

4

これはブロックと呼ばれ、iOS4およびMacOSX10.6で導入されました。

それらについてもっと学ぶことができるいくつかのリンクがあります:

上記の例は次のようになります。

// Start an animation over the next 1 second 
[UIView animateWithDuration:1.0 animations:^(void) {

    // For this animation, animate from the current value of im.transform back to the identity transform
    im.transform = CGAffineTransformIdentity;

} completion:^(BOOL finished) {  // At the completion of the first animation...

    // Wait 1 second, then start another 1-second long animation
    [UIView animateWithDuration:1.0 delay:1.0 options:UIViewAnimationCurveEaseOut animations:^(void) {

        im.alpha = 0.0;  // Fade out im during this animation

    } completion:^(BOOL finished) {  // When you complete this second animation
        [im removeFromSuperview];  // Remove im from its superview
    }];    
}];

したがって、imが変換の削除をアニメーション化する1秒、1秒の遅延、そしてimの1秒のフェードアウトがあります。

于 2012-01-25T06:52:51.637 に答える