2009-10-09 39 views
0

我正在做一些有點不尋常的事情。我正在嘗試將我的應用程序中的所有組件着色爲紅色(您可能已經看到過我的其他一些帖子,但這更具體)。爲此,我攔截了所有對CALayer的drawInContext的調用:在調用原始方法之後,我使用kCGBlendModeDarken(或kCGBlendModeMultipy)將紅色合成到圖層上。對於大多數UI組件來說,這非常適用。但是,當我使用UILabels進行此操作時,之前透明的背景會變成白色(呃,實際上是紅色的白色)。你可以看到,這看起來像我的工具欄UILabel在複合後可見的背景

http://www.thinkastronomy.com/RedLabels.png

注意,UIImages也沒有着色的這個形象,但那是另一個問題的話題。

那麼任何人都可以解釋爲什麼UILabel背景會被這個合成顯示出來嗎?它似乎幾乎獨立於合成模式。我怎樣才能防止這一點?

回答

0

標籤上是不透明的設置爲NO,並且它們背後的所有透明視圖都被設置爲NO?不透明的值是UIViews中的一個怪癖,它可能導致透明背景的問題。從文檔:「是,如果它是不透明的,否則,否,如果不透明,繪圖操作假定視圖滿足其邊界並且可以更高效地繪製。如果不透明並且視圖沒有填充邊界,則結果是不可預測的。如果視圖完全或部分透明,請將此屬性設置爲NO。默認值爲YES。「