CAGradientLayer没有跨越我的按钮的整个宽度 - xcode

问题描述:

我是新来的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

好像你的按钮改变它的大小以后(由于在自动屏蔽或限制),但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

如果你可以,并有充足的时间,我只能真的做美容改变这一点,并且在编程方面有点失落。 –