6

我一直有麻煩得到這個工作,無處可見我在網上看到一個工作示例。現在提供賞金,因爲它讓我瘋狂。這應該很容易,但似乎並非如此。改變一個UIBarButtonItem視圖以編程方式透明

我希望我的UINavigationBar上的按鈕是半透明的,以便它們允許UINavigationBar上的任何背景顯示。這種效果見於許多應用程序,下面的圖像示例。你可以通過在項目上設置一個自定義背景來做到這一點,我認爲這是一個不可接受的解決方案,因爲它需要事先準備圖像,而且它們不適用於可變按鈕等。它們看起來不像Apple UI和I不相信有這樣做的理由,UIKit已經爲這些按鈕繪製背景,我們只需要改變它。正確的解決方案使用Apple的apis生成的條形圖項和視圖。

UIBarButtonItem不是UIView子類。當您創建一個並將其添加到UINavigationBar時,框架中某處的某個代碼會爲其繪製一個視圖。框架方法似乎抵制任何與允許欄項目透明度相關的任何事情,例如tintColor屬性。

例如,這不工作:

UINavigationItem *item = [[UINavigationItem alloc] init]; 
UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:@"SUCKS" style:UIBarButtonItemStyleBordered target:self action:@selector(whatever:)]; 
editButton.tintColor = [UIColor colorWithWhite:0.4 alpha:0.3]; 
item.leftBarButtonItem = editButton; 

沒有我這樣做會讓UINavigationBar的允許半透明度的物品欄。我相信,在運行時,我們需要:

  1. 獲取圖像的欄項目
  2. 掩蓋它的透明度
  3. 坐落在欄項目

新的形象,但我沒有能夠在運行時獲得圖像或者正確掩蓋圖像。你怎麼做到這一點?

Like This

回答

5

創建自定義的UIView和在它繪製半透明的黑色矩形,並使用與initWithCustomView這一觀點。

see and

如果做不到這一點,您可能需要使用圖片(PNG)。例如一個1x1黑色像素png,不透明度爲30%。然後你可以初始化圖像。

編輯:我有過這樣的第二種方法使用工作:

buttonThree = [[UIBarButtonItem alloc] initWithTitle:@" sort button " style:UIBarButtonItemStyleBordered target:self action:@selector(sortMethod)]; 
UIImage *thebgUIimage = [UIImage imageNamed:@"semi.png"]; 
[buttonThree setBackgroundImage:thebgUIimage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

這導致具有透明背景圖像,所述導航欄背景圖像示出了通過一個按鈕。但是,您需要創建一個帶有圓角的圖像,因此每個按鈕寬度都需要一個圖像。我也發現this thread嘗試了以上

+0

我研究你的建議,我不知道太多關於核芯顯卡,但似乎庫水平低和基礎:即不強大的,除非你知道如何使用他們IE:需要閱讀,練習和學習的時間。在示例圖像中,看起來效果可以通過圓形視圖實現,半透明,但也需要在形狀周圍追蹤邊框。 – 2012-01-10 04:37:46

+0

除非您有工作代碼示例,否則我認爲您對使用填充了半透明矩形的自定義視圖的建議不起作用。一旦將具有自定義視圖的UIBarButtonItem添加到導航欄中,Alpha就會被忽略。 – 2012-01-15 15:24:23

+1

@您可以創建具有圓角和透明度的可拉伸圖像,這適用於所有按鈕尺寸。我認爲這可能是這裏需要的。 – jrturton 2012-01-16 19:26:56

0

而不是尋找代碼並打破了你的頭,我的建議是隻有透明的圖像,只有邊界類似於按鈕(添加陰影,如有必要),創建一個自定義類型的按鈕,將透明背景圖像添加到它,你可以任意你想要的文字。從這個自定義按鈕,相應地創建您的酒吧按​​鈕項目。

+0

嘿,謝謝。除了搜索示例代碼之外,我試圖使用文檔中似乎相關的任何方法或屬性來自己實現它。你建議的方法可以用來創建一個按鈕,但如果你正在生成自己的按鈕背景,它不會看起來像素完美,它需要看起來像蘋果UI。 – 2012-01-16 03:17:14

+0

不,用於創建欄按鈕項目,它有一個方法使用自定義視圖作爲欄按鈕項目。所以你只需要創建一個你想用作條形圖按鈕的圖像。而已。 – Satyam 2012-01-16 05:37:30

0

如果您的目標是iOS 5,則可以設置按鈕的背景圖像。

[_button setBackgroundImage:@"image" forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

注意,您需要爲國家UIControlSateSelected爲barMetrics兩個控制狀態設置背景圖片,並再次:UIBarMetricsLandscape,如果你的應用程序允許橫向。

再次注意這是一個iOS 5功能。

+0

從原始問題的措辭來看,這似乎不是「正確」的方法,因爲它將涉及準備「自定義」圖像背景。就我個人而言,我會實際使用這個解決方案,但是,嘿,OP似乎更好地知道,並且*想要一個更通用的解決方案。 – Till 2012-01-15 17:13:42

+0

是的,夠公平的。我想如果他不知道這個解決方案可能有用。 – 2012-01-15 17:16:09

+0

嘿傢伙,謝謝你的回覆。這是一個好方法,但要設置的圖像是這裏的問題。 Photoshop的一些按鈕背景看起來有點不對,它會看起來不是蘋果和業餘愛好者。我可能沒有在OP中清楚地說過,但這裏看起來最合適的方法是從Apple生成的條形圖項目中獲取圖像,並以某種方式掩蓋它,以便它包含透明度,然後重新設置它該項目,並可能確保任何有關不透明=否或其他透明度相關的選項設置正確。 – 2012-01-16 03:21:17

2

一個精彩的黑客是將UISegmentedControl與單個段(作爲按鈕)一起使用並設置其色調顏色。看看http://charles.lescampeurs.org/2011/02/10/tint-color-uibutton-and-uibarbuttonitem。我親自實施了這個。隨意問任何問題。

+1

那麼,如果你用半透明的顏色着色,那麼這樣做是否會產生預期的效果? – jrturton 2012-01-19 08:21:03

+0

它的確如此。 tintColor屬性設置完美。 – Akshay 2012-01-20 02:57:31

+0

這不起作用,它會更改tintColor,但alpha被忽略,並且在添加到導航欄時沒有透明度。你說tintColor屬性被設置,並且確定你可以改變顏色,但alpha是這裏的目標。 – 2012-01-22 14:40:36

0
+0

這是一篇關於在UINavigationBar上獲取背景圖像的方法的文章。在提交給蘋果公司的時候,可以使用虛擬的方式調用代碼,而不會被拒絕。我懷疑它,但如果是這樣,它可能會工作。 – 2012-01-22 14:48:34

+0

是的,我提交了一個應用程序與此代碼,它現在在應用商店;) – 2012-04-17 15:04:20