8

我有一个UIScrollView包含各种子视图(UIImageViewsUILabels标准UIViews)。其中一些UIImageViews被其他部分覆盖UIViews

但是,当我淡出 时UIScrollView,部分被覆盖的部分UIImageViews会在动画的短暂时刻暴露出来。

我希望能够在同一动画中同时淡化滚动视图及其所有内容 - 即不显示任何部分覆盖的图像。

如果不可能,我总是可以UIView在所有其他控件之上添加 a 并将其从 alpha 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;
                     }];
}

因此,使用 your 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 回答