8

UIScrollViewさまざまなサブビュー(UIImageViewsUILabelsおよびstandard )を含むがありますUIViews。一部はUIImageViews他のによって部分的にカバーされていUIViewsます。

ただし、をフェードアウトすると、アニメーションの短い瞬間にUIScrollView、の部分的に覆われた部分UIImageViewsが露出しています。

スクロールビューとそのすべてのコンテンツを同じアニメーションで同時にフェードできるようにしたいです。つまり、部分的に覆われた画像を表示しないようにします。

それが不可能な場合は、いつでもUIView他のすべてのコントロールの上にを追加し、アルファ0から1までフェードしてすべてを非表示にすることができますが、ビューとそのすべてのサブビューで完全なフェードを実行する方法があると確信しています。

私はこれを試しました:

[UIView beginAnimations:nil context:NULL];
[scrollViewResults setAlpha:0.0f];
[UIView commitAnimations];

そして私はこれを試しました:

- (IBAction)questionGroupChanged:(UIButton*)sender {
    [UIView beginAnimations:nil context:NULL];
    [self fadeViewHierarchy:scrollViewResults toAlpha:0.0f];
    [UIView commitAnimations];
}

- (void)fadeViewHierarchy:(UIView*)parentView toAlpha:(float)alpha {
    [parentView setAlpha:alpha];
    for (UIView *subView in parentView.subviews) {
        [self fadeViewHierarchy:subView toAlpha:alpha];
    }
}

しかし、私はまだそれをクラックしていません。何か案は?

4

3 に答える 3

14

これは、コンポジターの動作方法が原因で発生します。ビューをフェードイン/フェードアウトするときに、ビューのレイヤーでラスタライズを有効にする必要があります。

view.layer.shouldRasterize = YES;

余分なメモリとグラフィックスの処理時間がかかるため、おそらくアニメーションの期間中のみこれを有効にする必要があります。

于 2012-10-10T15:38:00.037 に答える
5

マイクの答えは正しいものであり、彼はこれについてすべての功績を認めるに値します。説明のために、次のようになります。

- (void)fadeView:(UIView*)view toAlpha:(CGFloat)alpha
{
    view.layer.shouldRasterize = YES;

    [UIView animateWithDuration:0.75
                     animations:^{
                         view.alpha = alpha;
                     }
                     completion:^(BOOL finished){
                         view.layer.shouldRasterize = NO;
                     }];
}

したがって、を使用するscrollViewResultsと、次のように呼び出されます。

[self fadeView:scrollViewResults toAlpha:0.0f];
于 2012-10-10T18:08:39.977 に答える
-2

UIViewクラスメソッド+animateWithDuration:*(iOS 4以降で利用可能)を試してみましたか

好き :

- (void)fadeAllViews
{
     [UIView animateWithDuration:2
     animations:^{
         for (UIView *view in allViewsToFade)
             view.alpha = 0.0;
     }
     completion:^(BOOL finished){}
     ];
}
于 2012-10-10T15:35:15.163 に答える