2

私はバウンス効果を与えるアニメーションで提示するカスタム ビューを持っています。今、縮小してから消えるのと同じように消えたいです。

ビューにバウンス効果を表示する以下のコードは正常に機能しています。

self.componentDetailController.view.center = iGestureRecognizer.view.center;
self.componentDetailController.view.alpha = 0.0;
self.componentDetailController.view.transform = CGAffineTransformMakeScale(0.01, 0.01);

 [UIView animateWithDuration:(0.2) animations:^{
     self.componentDetailController.view.center = CGPointMake(kScreenWidth / 2, kScreenHeight / 2);
     self.componentDetailController.view.alpha = 0.5;
     self.componentDetailController.view.transform = CGAffineTransformMakeScale(1.05, 1.05);
 } completion:^(BOOL iFinished) {
     [UIView animateWithDuration:(0.1) animations:^{
         self.componentDetailController.view.alpha = 0.90;
         self.componentDetailController.view.center = CGPointMake(kScreenWidth / 2, kScreenHeight / 2);
         self.componentDetailController.view.transform = CGAffineTransformMakeScale(0.98, 0.98);
     } completion:^(BOOL iFinished) {
         self.componentDetailController.view.alpha = 1.0;
         self.componentDetailController.view.transform = CGAffineTransformMakeScale(1.0, 1.0);
         self.componentDetailController.view.transform = CGAffineTransformIdentity;
     }];
 }];

機能していないビューを縮小して閉じるために、以下のコードを書きました。ビューを少し前面に出しますが、それを却下するわけではありません。ここで何が間違っているかの手がかり:

 - (void)cancelButtonPressed {
    self.componentDetailController.view.transform = CGAffineTransformIdentity;
    [UIView animateWithDuration:(0.1) animations:^{
        self.componentDetailController.view.alpha = 1.0;
        self.componentDetailController.view.transform = CGAffineTransformMakeScale(1.05, 1.05);
    } completion:^(BOOL iFinished) {
        [UIView animateWithDuration:(0.4) animations:^{
            self.componentDetailController.view.center = self.tappedComponentView.center;
            self.componentDetailController.view.transform = CGAffineTransformMakeScale(0.01, 0.01);
            self.componentDetailController.view.backgroundColor = [UIColor clearColor];
            self.componentDetailController.view.alpha = 0.0;
        } completion:^(BOOL iFinished) {
            [self.componentDetailController.view removeFromSuperview];
        }];
    }];

    self.componentDetailController = nil;
    [self enableBackView];
}

ここで、self.tappedComponentView.center は self.tappedComponentView.center と同じです。

4

1 に答える 1

5

+animateWithDuration:animations:completion:呼び出しはすぐに返されるため、2 番目のアニメーションが実行されるとすぐに、self.componentDetailControllerその後nilのすべてのビュー変換呼び出しはどこにも行きません。self.componentDetailController.view独自の変数に格納し、アニメーション ブロックでそれを参照します。例えば:

UIView *detailView = self.componentDetailController.view;
detailView.transform = CGAffineTransformIdentity;
[UIView animateWithDuration:0.1 animations:^{
    detailView.alpha = 1;
// …
}];

self.componentDetailController = nil;
于 2012-10-02T21:32:36.580 に答える