2011-12-20 12 views
24

Trong ví dụ của tôi, tôi có 3 chế độ xem: một chế độ xem màu đỏ có chứa hai chế độ xem màu trắng. Tôi thay đổi alpha của xem container màu đỏ thành 0,3 và điều này xảy ra (nhìn vào hình ảnh, kết quả hiện tại).iOS kiểm soát hành vi UIView alpha cho các bản xem trước

Bằng cách nhìn thấy điều này, tôi chỉ có thể giả sử (cho tôi biết nếu tôi sai), việc đặt alpha của chế độ xem cũng sẽ đặt tất cả các chữ cái của bản xem trước. Câu hỏi của tôi là: là có một cách để chỉ đơn giản là nói với quan điểm màu đỏ để hành động như một toàn thể để thiết lập alpha của nó sẽ cung cấp cho một cái gì đó trông giống như kết quả mong muốn (trong hình ảnh)?

results

Đây là những gì có vẻ như không có alpha:

enter image description here

+0

Trong "kết quả mong muốn" của bạn, bạn có muốn xem nền qua chế độ xem trắng và đỏ? Nếu không, bạn nên sử dụng màu tùy chỉnh với alpha 1. Subviews "kế thừa" alpha từ superview. Một cách khác bạn có thể thử là các lớp, nhưng tôi không chắc chắn. –

Trả lời

12

Kiểm tra các phím UIKit có thể cho Info.plist, cụ thể UIViewGroupOpacity.

UIViewGroupOpacity (Boolean - iOS) cho phéo Core Animation lớp con kế thừa độ mờ đục của superlayer của họ.

Info.plist UIKit Keys

+0

Theo tài liệu, khóa không theo mặc định, tức là không kế thừa. Điều này là kỳ lạ không? Các đường nối hành vi mặc định được kế thừa. http://developer.apple.com/library/ios/#documentation/general/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW6 – Robert

+0

Đúng - Tôi không hiểu hoặc. Nếu tôi không muốn thừa kế, tôi có đặt khóa thành CÓ hoặc KHÔNG? Tôi nói 'KHÔNG' và điều đó không khắc phục được vấn đề của tôi. – user798719

20

Để xây dựng trên câu trả lời của Mark: Nếu bạn đặt UIViewGroupOpacity trong Info.plist, nó sẽ thay đổi hành vi cho tất cả các quan điểm trong ứng dụng của bạn, nếu bạn quan tâm đến chỉ sửa chữa các cung này chế độ xem cụ thể, bạn cũng có thể sử dụng đoạn mã này:

redContainerView.layer.shouldRasterize = YES; 
// No setting rasterizationScale, will cause blurry images on retina. 
redContainerView.layer.rasterizationScale = [[UIScreen mainScreen] scale]; 
+1

Bạn làm tôi rất hạnh phúc. –

14

Thuộc tính alpha iOS được thừa kế bởi các phần phụ của nó. Nếu chúng ta đặt alpha 0,3 cho chế độ xem màu đỏ thì cả hai chế độ xem phụ sẽ có alpha = 0,3. Không có cách nào để dừng chế độ xem phụ để kế thừa giá trị alpha từ chế độ xem siêu của nó.

Giải pháp có thể là. Bạn có thể đặt màu của chế độ xem Màu đỏ với alpha 0.3. Thuộc tính màu sẽ không được xem bởi subview của nó. Yor có thể sử dụng mã bên dưới

[redView setBackgroundColor:[UIColor colorWithHue:238.0f/255.0f saturation:24.0f/255.0f brightness:24.0f/255.0f alpha:0.3]]; 
+0

câu trả lời hay nhất imo. – user1563544

+1

Câu trả lời hoàn toàn tốt nhất. Khái niệm rằng màu sắc có alpha và view có alpha, mỗi cái có các hành vi khác nhau, là khá quan trọng. – Richard

+0

Giá trị alpha không được kế thừa bởi các bản xem trước – lazi74