2008-09-23 31 views
7

我正在將自定義按鈕添加到我的iPhone用戶界面,並希望讓他們從Apple的應用程序中看起來很光滑。我有一個很好的默認玻璃圖像,但我討厭必須爲每個我想要的色調(紅色,綠色,藍色等)都有一個單獨的圖像。如何給UIButton着色?

有沒有辦法加載一個灰度PNG並將其調整爲我想要的顏色?更好的是,有沒有辦法讓蘋果的玻璃外觀,而不必加載自定義圖像?

回答

2

沒有一種我知道的方法,但是您可以通過使用默認的灰度圖像並將其與(僅繪製在純色上)合成來獲得所需的效果。如果您查看Core Graphics文檔,可以看到有十幾種不同的合成方法(例如Color Burn),並且它們的組合可能會產生所需的效果。

0

我結束了創建在聯繫人編輯視圖中的「刪除聯繫人」按鈕使用的呈現緊密匹配自己的自定義按鈕。

對於那些有興趣,可以在github在

PFTintedButton

7

有點晚了發現,但如果像我這樣的人對這類信息進行搜索:使用UISegmentedControl一個按鈕,設置它作爲momentary,並設置其tintColor。通過這種方式,不需要準備儘可能多的PNG,並且框架爲您處理所有渲染。

例子:

UISegmentedControl *cancelButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Cancel"]]; 
[cancelButton setSegmentedControlStyle:UISegmentedControlStyleBar]; 
[cancelButton setTintColor:[UIColor colorWithRed:0.8 green:0.3 blue:0.3 alpha:1.0]]; 
[cancelButton setMomentary:YES]; 
[cancelButton addTarget:self action:@selector(didTapCancel:) forControlEvents:UIControlEventValueChanged]; 
[self addSubview:cancelButton]; 
[cancelButton release]; 
+0

雖然這是很好的,我已經知道了,它並沒有真正適合我,因爲我希望我的UIBarButtonItem維護工具欄的色彩特性,一旦你介紹一個自定義視圖與一個UIButton這是不可能的窗口AFAIK。我想要做的就是改變文字顏色:( – 2011-04-13 16:50:51

0

我已經做到了這一點,它工作得很好:

iOS: Applying a RGB filter to a greyscale PNG

然而,它是一種欺騙行爲,它被添加,所以(例如)紅色分量R_dest = R_src + R_tint

如果您想要細粒度控制,例如,您可能想要通過以下方法提取每個像素的灰度值:平均RGB分量(用適當的權重),然後將該值乘以你的色調,所得到的顏色將是灰度(Sr,Sg,Sb)* {Tr,Tg,Tb}

這需要創建一個大塊的內存,創建一個位圖上下文,繪製到這個塊,將您的圖像繪製到這個上下文中,複製整個內存塊保存,處理 - 從副本中獲取數據並修改原始的後備存儲,然後從原始支持商店和釋放你分配的一切。

Problem reconstituting UIImage from RGBA pixel byte data

這個庫所做的一切都是你的,它是不是最有效的途徑,但它能夠完成任務。 iirc在他應該使用calloc時使用malloc。