CAGradientLayer 没有跨越我的按钮的整个宽度 - xcode
Posted
技术标签:
【中文标题】CAGradientLayer 没有跨越我的按钮的整个宽度 - xcode【英文标题】:CAGradientLayer isn't spanning the whole width of my button - xcode 【发布时间】:2016-08-24 16:23:28 【问题描述】:我是 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)
【问题讨论】:
【参考方案1】:您的按钮似乎稍后会更改其大小(由于自动调整掩码或约束),但 gradientLayer
保持原始(较小)大小。这是由于图层不会自动调整大小造成的。
您可以创建一个自定义 UIButton 子类,该子类将在 layoutSubviews
方法中更新自定义层的大小。
或者您可以创建一个自定义图层子类,尽管它还需要创建一个 UIButton 子类,如以下问题所述:CALayers didn't get resized on its UIView's bounds change. Why?
【讨论】:
感谢您的回答。我将如何创建一个自定义 UIButton 子类来更新 layoutSubviews 方法中自定义层的大小? 创建 UIButton 的子类,在 initWithFrame 方法中,您将创建渐变层并将其存储到强属性 (var),并将其添加为子层。 (和你现在一样)然后覆盖 layoutSubviews() 方法,你可以在其中调用 super.layoutSubviews() 并调整图层大小:self.gradientLayer.frame = self.bounds。抱歉,我无法发布您可以立即使用的实际代码,但如果您仍然需要帮助,我可以稍后再发布 :) 如果你有时间的话,那会很棒,我现在只能做一些表面上的改变,在编程方面有点迷茫。以上是关于CAGradientLayer 没有跨越我的按钮的整个宽度 - xcode的主要内容,如果未能解决你的问题,请参考以下文章
在 CAGradientLayer 上方显示 SCNScene
UIButton 上奇怪的 CAGradientLayer 错误