the*_*ncs 8 animation alpha objective-c uiview ios
我有一个UIScrollView包含各种子视图(UIImageViews,UILabels和标准UIViews).其中一些UIImageViews部分被其他人覆盖UIViews.
但是,当我淡出时UIScrollView,部分覆盖的部分UIImageViews会在动画的短暂时刻曝光.
我希望能够在同一动画中同时淡出滚动视图及其所有内容 - 即不显示任何部分覆盖的图像.
如果不可能的话,我总是可以UIView在所有其他控件之上添加一个并从alpha 0到1淡化它以隐藏所有内容,但我确信有一种方法可以对视图及其所有子视图执行完全淡入淡出.
我试过这个:
[UIView beginAnimations:nil context:NULL];
[scrollViewResults setAlpha:0.0f];
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)
我试过这个:
- (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];
}
}
Run Code Online (Sandbox Code Playgroud)
但我还是没有破解它.有任何想法吗?
Mik*_*ler 14
这是因为合成器的工作方式.在淡入/淡出时,您需要在视图的图层上启用光栅化:
view.layer.shouldRasterize = YES;
Run Code Online (Sandbox Code Playgroud)
您应该只在动画期间启用它,因为它会占用一些额外的内存和图形处理时间.
迈克的答案是正确的,因此他应得到所有荣誉。只是为了说明,它可能看起来像:
- (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;
}];
}
Run Code Online (Sandbox Code Playgroud)
因此,使用your scrollViewResults,它将被调用为:
[self fadeView:scrollViewResults toAlpha:0.0f];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1701 次 |
| 最近记录: |