2016-08-24 4 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滞在ように思えます。レイヤーのサイズが自動的に変更されないことが原因です。 layoutSubviewsメソッドでカスタムレイヤーのサイジングを更新するカスタムUIButtonサブクラスを作成できます。 また、カスタムレイヤーのサブクラスを作成することもできますが、この質問に記載されているようにUIButtonサブクラスを作成する必要があります。CALayers didn't get resized on its UIView's bounds change. Why?

+0

ありがとうございます。 layoutSubviewsメソッドでカスタムレイヤーのサイズを更新するカスタムUIButtonサブクラスを作成するにはどうすればいいですか? –

+0

UIButtonのサブクラスを作成します。ここでは、initWithFrameメソッドでグラデーションレイヤを作成し、それを強いプロパティ(var)に格納し、それをサブレイヤとして追加します。 (今と同じ) 次に、super.layoutSubviews()を呼び出してレイヤーのサイズを変更するlayoutSubviews()メソッドをオーバーライドします。 self.gradientLayer.frame = self.bounds。 申し訳ありませんがすぐに使用できる実際のコードを投稿することはできませんが、私はまだ助けが必要な場合は後で行うことができます:) – hybridcattt

+0

あなたができることができれば、私は本当に美容的な変更を行うことができますこの点、プログラミング面では少し失われています。 –

関連する問題