2012-10-10 44 views
8

我有一個包含各種子視圖(UIImageViews,UILabels和標準UIViews)的UIScrollView。一些UIImageView部分被其他UIViews覆蓋。褪色UIView允許子視圖被看到

但是,當我淡出UIScrollView時,UIImageViews的部分遮蓋部分將暴露在動畫的短暫時刻。

我希望能夠在相同的動畫中同時淡出scrollview及其所有內容 - 即不顯示任何部分覆蓋的圖像。

如果這是不可能的,我總是可以在所有其他控件的頂部添加一個UIView,並將它從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]; 
    } 
} 

但我仍然沒有破解它。有任何想法嗎?

回答

13

出現這種情況,因爲方式的合成作品。你需要輸入/輸出衰減時,它使視圖的層上的光柵化:

view.layer.shouldRasterize = YES; 

你或許應該只允許本作的動畫的持續時間,因爲它會佔用一些額外的內存和圖形處理時間。

+2

另外不要忘記設置適當的比例,否則你的光柵化淡入淡出會在視網膜顯示上看起來很糟糕。 view.layer.rasterizationScale = [UIScreen mainScreen] .scale; – dizy

-2

你嘗試與UIView類方法+ animateWithDuration:*(可在iOS 4 +)

像:

- (void)fadeAllViews 
{ 
    [UIView animateWithDuration:2 
    animations:^{ 
     for (UIView *view in allViewsToFade) 
      view.alpha = 0.0; 
    } 
    completion:^(BOOL finished){} 
    ]; 
} 
+0

都能跟得上。這沒有奏效。無論如何,儘管埃馬紐埃爾。 – theDuncs

4

邁克的回答是正確的,他值得所有信貸。只是想說明,它可能看起來像:

- (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]; 
+0

感謝您的插圖@Rob – Stephan