2012-05-04 71 views
19

UIView的opaque屬性在默認情況下始終設置爲「YES」。但UIView類的參考陳述如下:UIView不透明屬性

不透明視圖預計會填滿完全不透明的內容 - 也就是說,內容應該有一個1.0的alpha值。如果視圖不透明並且不填充邊界或包含完全或部分透明的內容,則結果是不可預測的。

由於改變視圖的alpha是很常見的,尤其是在過渡或動畫,那麼上面的語句將意味着你必須始終手動設置opaqueNO,如果你要改變alpha屬性爲好。

但我從來沒有手動調整opaque並沒有任何明顯的症狀。做這個考慮有多必要?

回答

12

答案是,iOS足夠聰明地認識到,如果您的視圖的alpha小於1,那麼無論您的視圖的opaque屬性如何,都需要在視圖後面繪製內容。

回覆評論:在我有限的實驗中,我認爲該視圖的opaque屬性沒有任何影響。 (我認爲文檔是錯誤的)。視圖的圖層opaque屬性確實有一個影響:它控制着傳遞給drawRect:CGContext是否具有Alpha通道。如果圖層的opaque屬性爲YES,則上下文不具有Alpha通道(並且被視爲每個像素都具有1.0的Alpha)。

更改視圖的opaque屬性對圖層的opaque屬性沒有影響。這與(例如)視圖的alpha屬性不同,該屬性僅是圖層的opacity屬性的包裝。

理論上,已記錄opaque屬性允許他們優化繪圖,Apple可以在未來實現該優化。實際上,這樣做可能會破壞很多應用程序,因此他們可能不會將這種更改應用於與較舊的SDK鏈接的應用程序。 (他們有能力使UIKit的行爲有所不同,具體取決於該應用與哪個版本鏈接。)

+3

但是這並沒有回答這個問題... @andrewx說:如果你忽略了文檔,並使用'opacity = YES'來使用透明區域,一切似乎都沒有問題。除了文檔會錯誤的事實之外,基於文檔中描述的屬性值的優化(未發佈)似乎根本不會發生。或者如果確實如此,則文檔沒有正確描述。對我的問題是:我應該照顧財產,如果是的話,爲什麼?性能?如果我不這樣做,會不會有糟糕的渲染?任何經驗的人?重現? –

+1

我同意,這對我仍然沒有解決。如果iOS足夠聰明,可以忽略不透明屬性,那麼該屬性開始的目的是什麼? – johnbakers

+1

@rob mayoff感謝您的編輯。我在最後一個小時做了一些測試,並確切地觀察了你描述的內容。我有一個全屏幕滾動視圖的應用程序,其中包含較小的滾動視圖作爲行,每個視圖都包含大量的子視圖,其中包含許多帶有透明背景的子視圖,甚至是陰影。我們在滾動時遇到了一些性能問題,我們通過刪除透明度和陰影來修復。但是,對於我現在的測試,我打開/關閉透明度,陰影和不透明屬性:在沒有配置的情況下,不透明道具的改變對正確的渲染,性能或內存使用有任何影響。 –

1

只要視圖內容本身(不是它的子視圖)沒有alpha,那麼就很好。因此,如果您使用帶alpha的PNG圖像初始化UIImageViews,則opaque將自動設置爲NO

通常你並不需要很多不透明的視圖。但是完整視圖的阿爾法無論如何都是不同的。