0

UIViewAnimationOptionTransitionCurlUpアニメーションでself.viewをリロード(更新)する必要があります。視覚的には、古いビューはカールアップ効果でアニメーション化され、その後に新しい更新されたビューが表示されます。現在のビューのスクリーンショットを作成し、それをすべての上に配置し、アニメーションを適用してロールアップして削除するよりも良いアプローチを見つけることができませんでした。次に、古いビューが丸まった後、更新されたビュー要素が適切に表示されます。

ただし、カールアップは機能しません。トランジションはカールするのではなく、フェードアウトします。どうしたの?コードは以下のとおりです。

UIGraphicsBeginImageContextWithOptions(self.view.frame.size, NO, 0.0);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIView* screenView = [[UIView alloc] initWithFrame:self.view.frame];
screenView.tag = TAG_SCREENSHOT_VIEW;
screenView.backgroundColor = [UIColor colorWithPatternImage:screenshot];
[self.view addSubview:screenView];
[screenView.superview bringSubviewToFront:screenView];

[UIView transitionWithView:screenView
                  duration:1.0f
                   options:UIViewAnimationOptionTransitionCurlUp
                animations:^ { screenView.alpha = 0.0f; }
                completion:^ (BOOL finished) {
                    [screenView removeFromSuperview];
                }];
4

2 に答える 2

1

これは正しいバージョンです:

[UIView transitionWithView:self.view
                  duration:0.5f
                   options:UIViewAnimationOptionTransitionCurlUp
                animations:^ { [screenView removeFromSuperview]; }
                completion:nil];

transitionWithViewはself.viewであり、アニメーションブロックはscreenViewを削除する必要があります

于 2013-02-26T16:04:30.550 に答える
0

alphaアニメーション内でビューをゼロにすることで、実際にビューをフェードアウトしています。

アニメーションブロックにサブビューを追加して(そこにのみ)、アニメーションを追加するビューを取得してみてください。

[UIView transitionWithView:self.view
              duration:1.0f
               options:UIViewAnimationOptionTransitionCurlUp
            animations:^ { [self.view addSubview:screenView]; screenView.alpha = 0.0f; }
            completion:^ (BOOL finished) {
                [screenView removeFromSuperview];
            }];

いずれにせよ、私は がそこで何をしているのか理解できるかどうかわかりませんscreenView.alpha = 0.0f;。おそらく、以下は達成しようとしているものに近いものです (この場合、アニメーションを実行する前にサブビューを追加する必要があります):

[UIView transitionWithView:self.view
              duration:1.0f
               options:UIViewAnimationOptionTransitionCurlUp
            animations:^ { [screenView removeFromSuperview]; }
            completion:nil];
于 2013-02-26T15:32:11.977 に答える