2016-08-24 61 views
1

我是新來的xcode,我將一個漸變層放在按鈕上,它不填滿整個寬度。我不確定我做錯了什麼。我的代碼在這裏以及它如何渲染的截圖。CAGradientLayer沒有跨越我的按鈕的整個寬度 - xcode

let gradientLayer = CAGradientLayer() 
gradientLayer.frame = self.btnSavePhoto.bounds 
let color1 = UIColor(red:0.05, green:0.29, blue:0.49, alpha:1.0).CGColor as CGColorRef 
let color2 = UIColor(red:0.08, green:0.23, blue:0.39, alpha:1.0).CGColor as CGColorRef 
gradientLayer.colors = [color1, color2] 
gradientLayer.locations = [0.0, 1.0] 
self.btnSavePhoto.layer.addSublayer(gradientLayer) 

enter image description here

回答

2

好像你的按鈕改變它的大小以後(由於在自動屏蔽或限制),但gradientLayer停留在原來的(小)規模。這是由於圖層不自動調整大小造成的。 您可以創建一個自定義UIButton子類,它將更新layoutSubviews方法中自定義圖層的大小。 或者您可以創建一個自定義圖層子類,但它也需要創建一個UIButton子類,如以下問題所述:CALayers didn't get resized on its UIView's bounds change. Why?

+0

感謝您的回答。我將如何去創建一個自定義的UIButton子類來更新layoutSubviews方法中自定義圖層的大小? –

+0

創建UIButton的子類,在initWithFrame方法中,您將創建漸變圖層並將其存儲到強屬性(var),並將其添加爲子圖層。 (與現在一樣) 然後重寫layoutSubviews()方法,您可以在其中調用super.layoutSubviews()並調整圖層大小: self.gradientLayer.frame = self.bounds。 對不起,我不能發佈實際的代碼,你可以立即使用,但我可以做以後如果你仍然需要幫助:) – hybridcattt

+0

如果你可以,並有充足的時間,我只能真的做美容改變這一點,並且在編程方面有點失落。 –