0

この基本的なビューアニメーションについて考えてみましょう。1秒間で、ビューがゼロに縮小されます。

[UIView animateWithDuration: 1.0
                      delay: 0.0
                    options: UIViewAnimationCurveEaseIn
                 animations:^{
                     vw.transform = CGAffineTransformMakeScale(0.0, 0.0);
                 }
                 completion:^(BOOL finished) {
                     if (finished) {
                         vw.transform = CGAffineTransformIdentity;
                     }
                 }
];

私がやりたいのは、この同じアニメーションを、アプリ全体のさまざまな時間にさまざまなビューで使用することです。これを行うには、メソッドに簡単に入れて、ズームしたいビューを渡すことができます。問題ない。

課題は、状況によっては、アニメーションの完成時に別のことをする必要があるかもしれないということです。たとえば、ある場合にはSuperViewからビューを削除したい場合があり、別の場合にはビューを新しい場所に移動したい場合があります(後でズームインするため)。

簡単に言うと、アニメーションが完了したときに、メソッドの呼び出し元に通知するにはどうすればよいですか?

completion:^(BOOL finished) {
    if (finished) {
        vw.transform = CGAffineTransformIdentity;
        // Do something unique here
    }
}
4

1 に答える 1

3

完了ブロック自体も渡すことができます。

- (void)animateView:(UIView *)v completion:(void ^(BOOL))ch
{
    [UIView animateWithDuration: 1.0
                          delay: 0.0
                        options: UIViewAnimationCurveEaseIn
                     animations:^{
                         v.transform = CGAffineTransformMakeScale(0.0, 0.0);
                     }
                     completion:ch
    ];
}

それからそれを次のように呼びます

[self animateView:someView completion:^(BOOL flag) {
    // do stuff here
}];
于 2012-12-12T19:42:52.397 に答える