0

カスタムUITableViewCell(画像ビュー、ボタン、3つのラベル)を作成しました。現在、アニメーションを追加しようとしています。したがって、ボタンをタップすると、ボタンがフェードアウトし、スピナーがボタンに置​​き換わります。2秒後、セルのサブビューがフェードインすると、セルが赤い色でオーバーレイされ、インジケーターが削除され、赤いオーバーレイがフェードアウトし始めます。また、以前に削除したボタンがフェードインします。

(私はそれをより良い方法で表現することはできませんでした:P)

方法は次のとおりです。

-(void)rentButtonPressed:(id)sender
{

    UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
    [indicator startAnimating];
    indicator.center = self.rentButton.center;

    [UIView animateWithDuration:0.2
                     animations:^{self.rentButton.alpha = 0.0;}
                     completion:^(BOOL finished){
                         [self.rentButton removeFromSuperview];
                         [self addSubview:indicator];
                     }
     ];

    UIView *overlay = [[UIView alloc] initWithFrame:self.backgroundImage.frame];
    overlay.alpha = 0.0;
    overlay.backgroundColor = [UIColor redColor];
    [self.contentView addSubview:overlay];

    [UIView animateWithDuration:0.4
                          delay:2.0
                        options:UIViewAnimationCurveEaseInOut
                     animations:^{
                             [indicator removeFromSuperview];
                             overlay.alpha = 0.4;
                         }
                    completion:^(BOOL finished){
                        [UIView animateWithDuration:0.4
                                        animations:^{ overlay.alpha = 0.0; }
                                        completion:^(BOOL finished)
                                        {
                                            [overlay removeFromSuperview];
                                        }
                        ];

                        [self.contentView addSubview:self.rentButton];
                        [UIView animateWithDuration:0.4 animations:^{ self.rentButton.alpha = 1.0;}];
                        [self.delegate didTryToRentMovieAtCell:self];
                    }
    ];

}

したがって、コードはボタンをフェードアウトし、スピナーに置き換えて、赤いオーバーレイでフェードインします。問題は、赤いオーバーレイがフェードアウトしないが、ボタンと同じように消えて、フェードインするのではなく、表示されるだけであるということです。

4

1 に答える 1

2

アニメーション中に、サブビューを追加および削除してビュー階層を変更します。UIViewクラスメソッドanimateWithDuration:animations:completionは、ビュー内のプロパティの変更をアニメーション化することのみを目的としており、ビューの階層を変更することを目的としていません。

代わりに、UIViewクラスメソッドtransitionWithView:duration:options:animations:completion:を使用してみてください。代わりに、セルのコンテンツビューを「コンテナー」として使用してください。

このドキュメントは、ビュープロパティの変更のアニメーション化とビュー遷移のアニメーション化を区別するのに役立ちます。具体的には、「ビューのサブビューの変更」セクションを参照してください。http: //developer.apple.com/library/ios/#documentation/windowsviews/conceptual/viewpg_iphoneos /animatingviews/animatingviews.html

于 2012-11-27T21:45:46.503 に答える