2012-10-10 27 views
8

Tôi có UIScrollView chứa nhiều bản xem phụ khác nhau (UIImageViews, UILabels và UIViews chuẩn). Một số UIImageViews một phần được bao phủ bởi các UIView khác.Làm mờ UIView cho phép xem phụ đề

Tuy nhiên, khi tôi làm mờ UIScrollView, các phần được bao phủ một phần của UIImageViews đang được hiển thị trong khoảnh khắc ngắn của hoạt ảnh.

Tôi muốn có thể làm mờ chế độ xem cuộn và tất cả nội dung của nó cùng một lúc trong cùng một hoạt ảnh - tức là không tiết lộ bất kỳ hình ảnh nào được bao phủ một phần.

Nếu không thể, tôi luôn có thể thêm UIView lên trên tất cả các điều khiển khác và làm mờ nó từ alpha 0 tối đa 1 để ẩn mọi thứ, nhưng tôi chắc chắn có cách để thực hiện mờ hoàn toàn trên một chế độ xem và tất cả các phần phụ của nó.

Tôi cố gắng này:

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

Và tôi đã thử điều này:

- (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]; 
    } 
} 

Nhưng tôi vẫn không nứt nó. Bất kỳ ý tưởng?

Trả lời

13

Điều này xảy ra vì cách thức hoạt động của thợ sắp chữ. Bạn cần phải bật rasterization trên lớp của xem khi mờ dần nó vào/ra:

view.layer.shouldRasterize = YES; 

Bạn nên có lẽ chỉ cho phép này trong suốt thời gian của phim hoạt hình bởi vì nó sẽ mất một số thời gian xử lý bộ nhớ phụ và đồ họa.

+2

Cũng đừng quên thiết lập tỷ lệ thích hợp, hoặc mờ dần rasterized của bạn sẽ trông shitty trên màn hình võng mạc. view.layer.rasterizationScale = [UIScreen màn hình chính] .scale; – dizy

-2

Bạn có thử với phương pháp lớp UIView + animateWithDuration: * (có sẵn trên iOS 4 và +)

Giống như:

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

Nope. Điều này không hiệu quả. Cảm ơn dù sao đi nữa Emmanuel. – theDuncs

4

Câu trả lời của Mike là câu trả lời đúng và anh ấy xứng đáng nhận được tất cả tín dụng cho điều này. Chỉ để minh họa, nó có thể trông giống như:

- (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; 
        }]; 
} 

Vì vậy, sử dụng scrollViewResults của bạn, nó sẽ được gọi là:

[self fadeView:scrollViewResults toAlpha:0.0f]; 
+0

Cảm ơn bạn đã minh họa @Rob – Stephan

Các vấn đề liên quan