gpt4 book ai didi

ios - 渐变颜色不会根据按钮 isSelected 状态而变化

转载 作者:行者123 更新时间:2023-11-30 12:03:31 25 4
gpt4 key购买 nike

我制作了一个自定义渐变按钮,这样我就可以更改不同状态下的渐变颜色:

class GradientButton: UIButton {

public var buttongradient: CAGradientLayer = CAGradientLayer()

override var isSelected: Bool {
didSet {
if isSelected {
buttongradient.colors = [UIColor(hexString: "#ef473a")!, UIColor(hexString: "#cb2d3e")!].map { $0.cgColor }
} else {
buttongradient.colors = [UIColor(hexString: "#29a1e2")! , UIColor(hexString: "#485ac8")!].map { $0.cgColor }
}
}
}

override init(frame: CGRect) {
super.init(frame: frame)
self.addthegradientLayer()
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.addthegradientLayer()
}

override func layoutSubviews() {
super.layoutSubviews()
self.addthegradientLayer()

}

func addthegradientLayer() {
//the cells gradient colors
buttongradient.frame = self.bounds
buttongradient.cornerRadius = buttongradient.frame.height / 2
buttongradient.colors = [UIColor(hexString: "#29a1e2")! , UIColor(hexString: "#485ac8")!].map { $0.cgColor }
buttongradient.startPoint = CGPoint(x: 1.0, y: 0.0)
buttongradient.endPoint = CGPoint(x: 0.0, y: 1.0)
self.layer.insertSublayer(buttongradient, at: 0)
}

当我运行此代码时,按钮背景清晰。没有渐变显示。

编辑

正如评论中建议的那样:

buttongradient.frame = self.bounds

就是解决方案。

跟进问题

现在我意识到,渐变不会根据 isSelected 状态改变颜色。

最佳答案

存在多个问题:

  1. 正如您现在所做的那样,您必须使用 self.bounds 来更新图层框架。
  2. 无需更改初始值设定项中的层。 layoutSubviews 始终在渲染之前调用。
  3. 如果您的目标是在按下按钮时更改颜色,则需要使用 isHighlighted,而不是 isSelected
  4. 每个布局都会重写您的颜色值,请从布局方法中删除 buttongradient.colors
  5. 不需要使用字符串来定义十六进制颜色。我建议使用整数,例如0x29a1e2(参见How to use hex colour values)。
class GradientButton: UIButton {

public let buttongradient: CAGradientLayer = CAGradientLayer()

override var isSelected: Bool { // or isHighlighted?
didSet {
updateGradientColors()
}
}

func updateGradientColors() {
let colors: [UIColor]

if isSelected {
colors = [UIColor(hexString: "#ef473a")!, UIColor(hexString: "#cb2d3e")!]
} else {
colors = [UIColor(hexString: "#29a1e2")!, UIColor(hexString: "#485ac8")!]
}

buttongradient.colors = colors.map { $0.cgColor }
}

override init(frame: CGRect) {
super.init(frame: frame)
self.setupGradient()
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setupGradient()
}

override func layoutSubviews() {
super.layoutSubviews()
self.updateGradient()
}

func setupGradient() {
buttongradient.startPoint = CGPoint(x: 1.0, y: 0.0)
buttongradient.endPoint = CGPoint(x: 0.0, y: 1.0)
self.layer.insertSublayer(buttongradient, at: 0)

updateGradientColors()
}

func updateGradient() {
buttongradient.frame = self.bounds
buttongradient.cornerRadius = buttongradient.frame.height / 2
}
}

关于ios - 渐变颜色不会根据按钮 isSelected 状态而变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46931478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com