2012-05-21 57 views
1

創建了一個帶有梯度層的按鈕梯度層:的UIButton與不突出

//MyGradient creates and returns gradient layers 
CAGradientLayer *gradient = [MyGradient blueGradient]; 

//MyButton is a subclassed UIButton which adds some attributes 
MyButton *testButton = [MyButton buttonWithType:UIButtonTypeCustom]; 
testButton.frame = CGRectMake(10, 10, 150, 50); 
[testButton addTarget:self action:@selector(testButton:) forControlEvents:UIControlEventTouchUpInside]; 

[gradient setFrame:testButton.bounds]; 

testButton.clipsToBounds = YES; 
[testButton.layer insertSublayer:gradient atIndex:0];  

[self.view addSubview:testButton]; 

我怎樣才能獲得圖像時,按下突出?我已經找到了幾個子類化UIButton並覆蓋drawRect:方法的示例代碼。有沒有更簡單的方法讓按鈕突出顯示?

回答

1

您的按鈕沒有圖像 - 所以沒有什麼突出。

設置一個圖像(如果你想要一個漸變圖像)作爲按鈕的背景......並且即使你沒有爲UIControlStateHighlighted設置圖像,按鈕將會「高亮」 - 基本上,iOS會反轉顏色。

另外,如果你只需要水平/只垂直梯度,則可能需要再檢查一下這個功能了:resizableImageWithCapInsets

玩得開心!

+0

補充一點,使用'UIGraphicsBeginImageContext'和朋友生成圖像是非常簡單的。 – benzado

0

沒有內置的方法來做到這一點。重載UIButton並根據按鈕的狀態在drawRect中自己繪製漸變,或者爲這兩個狀態創建2個漸變圖像並使用setBackgroundImage:image forState:UIControlStateNormal/UIControlStateHighlighted

+0

除非您真的需要,並且知道您在做什麼,否則我會提醒您不要重寫'drawRect:'。在您處理所有按鈕狀態更改和大小調整問題時,您最好只生成一個圖像並讓現有的UIButton代碼完成工作。 – benzado

0

最簡單的事情做的是把你的梯度圖像文件(最好是可調整大小),並使用代碼,如:

[testButton setImage:normalStateImage forState:UIControlStateNormal]; 
[testButton setImage:highlightStateImage forState:UIControlStateHighlighted];