UIBarButtonItem的3種定製方法

來源:互聯網
上載者:User

工具列按鈕有3種主要的定製方法:1、在Interface builder中定製;2、setItems方法定製;3、addSubview方法定製。

最簡單的方法是在Interface builder中定製。這種方法只需在Interface builder中將Bar Button Item的style設定為Plain,然後修改image屬性就可以了。

但是,這種方式很可能不是你想要的結果。如果你有一張按鈕圖片,是這樣的:

那麼你用這種方式,很可能只能得到這樣的結果:

工具列上只顯示了一個灰色的方塊。為什麼會這樣?這是因為Bar Button Item並不是用你設定的圖片作為按鈕的背景圖片。它用這張圖片做了一張遮罩(即捨棄所有的顏色資訊,只留取alpha值,你可以參考蘋果 Quartz2D編程指南中的位元影像及遮罩一節),然後和Tool Bar的背景圖進行了位元影像遮罩處理。因此不管你提供了什麼樣子的位元影像,Bar Button Item只會用到其中的alpha通道。由於你提供的位元影像是一張普通的圖片,alpha通道除了透明部分外,其他像素的alpha值都是一樣的(alpha=1),所以遮罩合成後,只會顯示位元影像的輪廓,無法顯示其中的文字和細節。

因此,為了顯示按鈕圖片中的文字,我們必須對這張圖片進行特殊處理。首先用圖形編輯工具(如photoshop)開啟它,使用濾鏡中的Color Controls功能調整色彩飽和度、亮度和對比,讓它變成一張灰階圖片(色彩飽和度調整為0):

然後用濾鏡中的Mask to Alpha功能,將灰階轉換成alpha值:

乍一看,好像圖片變成空白了,其實不是,它只是把原來的顏色值轉換為了alpha值,並且用不同透明度的白色表示。

好的,儲存對圖片的編輯。重新運行程式:

現在,按鈕根據位元影像的alpha值顯示,由於遮罩的原因,所有的顏色資訊丟失,按鈕只呈現了灰階漸層效果,而不是色彩坡形效果。

如果你對這個結果不滿意,那麼你只能用另一種方法:addSubview方法了。這個方法需要用代碼實現:

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

btn.frame =CGRectMake(205, 5, 38, 38);

[btn setBackgroundImage:[UIImage imageNamed:@"按鈕-返回1.png"] forState:UIControlStateNormal];

[btn addTarget: self action: @selector(goBackAction) forControlEvents: UIControlEventTouchUpInside];

[toobar addSubview: btn];

其中,按鈕-返回1.png是一張顏色圖片:

程式啟動並執行結果是:

我們可以看到,位元影像的顏色資訊仍然可用的,它也不需要你用圖形編輯工具進行特殊處理。這個方法唯一不便的地方,是程式員必須自己計算按鈕控制項的frame。

最後是setItems方法。其實它跟第1種Interface builder方法並沒有多少區別,仍然要對位元影像進行遮罩處理,因此它的實現也依賴於你的圖形編輯技巧。只不過,它是用代碼實現而不是用IB,因此要寫類似如下的代碼:

UIImage* img1=[UIImage imageNamed:@"按鈕-返回2.png"];

    UIBarButtonItem*barItem1 = [[UIBarButtonItem alloc]

                               initWithImage:img1

                               style:UIBarButtonItemStylePlain

                               target:self

                               action:@selector(goBackAction)];

    [toobar setItems:[NSArray arrayWithObjects:barItem,barItem1,nil]];

轉自:http://www.oschina.net/question/54100_36173

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.