2012-05-04 35 views
19

Thuộc tính opaque của UIView theo mặc định luôn được đặt là "CÓ". Tuy nhiên, tham chiếu lớp UIView nêu rõ điều này:Thuộc tính mờ đục UIView

Chế độ xem mờ sẽ được lấp đầy với nội dung hoàn toàn mờ - tức là nội dung phải có giá trị alpha là 1,0. Nếu chế độ xem bị mờ và không lấp đầy giới hạn của nó hoặc chứa toàn bộ hoặc một phần nội dung trong suốt, kết quả sẽ không thể đoán trước.

Kể từ khi thay đổi alpha của một cái nhìn khá phổ biến, đặc biệt là trong quá trình chuyển đổi hoặc hình ảnh động, sau đó tuyên bố trên sẽ ngụ ý rằng bạn phải luôn tự đặt opaque-NO nếu bạn đang đi để thay đổi alpha tài sản là tốt.

Nhưng tôi chưa bao giờ điều chỉnh thủ công opaque và chưa có bất kỳ triệu chứng đáng chú ý nào. Cần phải cân nhắc điều này như thế nào?

Trả lời

12

Câu trả lời là iOS đủ thông minh để nhận ra rằng nếu chế độ xem của bạn là alpha nhỏ hơn 1, nó cần vẽ nội dung phía sau chế độ xem của bạn, bất kể thuộc tính của bạn là opaque.

Để trả lời nhận xét: từ thử nghiệm giới hạn của tôi, tôi không nghĩ rằng thuộc tính opaque của chế độ xem có bất kỳ tác dụng nào. (Tôi nghĩ tài liệu sai.) Thuộc tính opaque của lớp xem có hiệu lực: nó kiểm soát việc CGContext được chuyển đến drawRect: có kênh alpha hay không. Nếu thuộc tính của lớp opaque là CÓ, ngữ cảnh không có kênh alpha (và được xem như mọi pixel có alpha là 1.0).

Thay đổi thuộc tính opaque của chế độ xem không ảnh hưởng đến thuộc tính opaque của lớp. Điều này khác với (ví dụ) thuộc tính alpha của chế độ xem, đây chỉ là một trình bao bọc cho thuộc tính opacity của lớp.

Về lý thuyết, có tài liệu rằng thuộc tính opaque cho phép họ tối ưu hóa bản vẽ, Apple có thể triển khai tối ưu hóa đó trong tương lai. Trong thực tế, làm như vậy có thể sẽ phá vỡ rất nhiều ứng dụng, vì vậy họ có thể sẽ không thực hiện thay đổi như vậy áp dụng cho các ứng dụng được liên kết với các SDK cũ hơn. (Họ có khả năng làm cho UIKit hoạt động khác nhau tùy thuộc vào phiên bản ứng dụng được liên kết với.)

+3

Nhưng điều này không trả lời câu hỏi ... như @andrewx đã nói: Nếu bạn bỏ qua tài liệu và sử dụng các khu vực trong suốt với 'opacity = YES' mọi thứ có vẻ ổn. Bên cạnh thực tế là các tài liệu sẽ là sai sau đó, tối ưu hóa dựa trên giá trị của tài sản được mô tả trong tài liệu là tốt (không được đăng) dường như không diễn ra ở tất cả. Hoặc nếu có, nó không được mô tả đúng cách bởi các tài liệu. Câu hỏi với tôi là: Tôi có nên chăm sóc tài sản và nếu có thì tại sao? Hiệu suất? Có thể có kết xuất xấu nếu tôi không? Bạn có kinh nghiệm gì không? Có thể tái sản xuất? –

+1

Tôi đồng ý, điều này vẫn chưa được giải quyết cho tôi. nếu iOS đủ thông minh để bỏ qua thuộc tính mờ đục, thì mục đích của thuộc tính này bắt đầu bằng gì? – johnbakers

+1

@rob mayoff Cảm ơn bạn đã chỉnh sửa. Tôi đã làm một số thử nghiệm vào giờ cuối cùng này và quan sát chính xác những gì bạn mô tả.Tôi có một ứng dụng với một scrollview toàn màn hình có chứa scrollviews nhỏ hơn như dòng, mỗi chứa rất nhiều subviews, với rất nhiều subviews với nền trong suốt và thậm chí thả bóng. Chúng tôi đã gặp phải một số vấn đề về hiệu suất khi cuộn, chúng tôi đã cố định bằng cách xóa độ trong suốt và bóng tối. Tuy nhiên, đối với các thử nghiệm của tôi bây giờ tôi đã bật/tắt tính minh bạch, bóng và đặc tính mờ đục: Không có cấu hình nào, sự thay đổi của opaque prop có ảnh hưởng đến việc render, hiệu suất hay sử dụng bộ nhớ. –

1

Miễn là nội dung chế độ xem (không phải các bản xem phụ của nó) không có alpha, bạn vẫn ổn. Vì vậy, nếu bạn khởi tạo UIImageViews với hình ảnh PNG có alpha, opaque sẽ được đặt thành tự động NO.

Thông thường bạn không thực sự cần nhiều lượt xem không mờ đục. Tuy nhiên, alpha của chế độ xem hoàn chỉnh là khác nhau.

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