故事板上方向转换后自定义渐变按钮的大小调整
Resize of custom gradient button after orientation transition on Storyboard
我的自定义按钮的自动布局有问题。
我为按钮创建了一个自定义 class 以通过界面生成器添加渐变颜色。
@IBDesignable
class GradientButton: UIButton {
private let gradientLayer = CAGradientLayer()
@IBInspectable
var topGradientColor: UIColor? {
didSet {
setGradient(topGradientColor: topGradientColor, bottomGradientColor: bottomGradientColor)
}
}
@IBInspectable
var bottomGradientColor: UIColor? {
didSet {
setGradient(topGradientColor: topGradientColor, bottomGradientColor: bottomGradientColor)
}
}
private func setGradient(topGradientColor: UIColor?, bottomGradientColor: UIColor?) {
if let topGradient = topGradientColor, let bottomGradient = bottomGradientColor {
self.layer.masksToBounds = true
gradientLayer.frame = bounds
gradientLayer.colors = [topGradient.cgColor, bottomGradient.cgColor]
gradientLayer.borderColor = layer.borderColor
gradientLayer.borderWidth = layer.borderWidth
gradientLayer.cornerRadius = layer.cornerRadius
layer.insertSublayer(gradientLayer, at: 0)
} else {
gradientLayer.removeFromSuperlayer()
}
}
}
使用该自定义 class 我可以在 Interface Builder 上设置渐变颜色,并立即在我的故事板上看到结果。
问题是:当我将方向切换为水平方向时,我的按钮只绘制了一半。
好像由于某种原因没有应用新调整大小的参数。
好像是什么问题?
将此添加到您的 GradientButton
class:
override var bounds: CGRect {
didSet {
setGradient(topGradientColor: topGradientColor, bottomGradientColor: bottomGradientColor)
}
}
我的自定义按钮的自动布局有问题。
我为按钮创建了一个自定义 class 以通过界面生成器添加渐变颜色。
@IBDesignable
class GradientButton: UIButton {
private let gradientLayer = CAGradientLayer()
@IBInspectable
var topGradientColor: UIColor? {
didSet {
setGradient(topGradientColor: topGradientColor, bottomGradientColor: bottomGradientColor)
}
}
@IBInspectable
var bottomGradientColor: UIColor? {
didSet {
setGradient(topGradientColor: topGradientColor, bottomGradientColor: bottomGradientColor)
}
}
private func setGradient(topGradientColor: UIColor?, bottomGradientColor: UIColor?) {
if let topGradient = topGradientColor, let bottomGradient = bottomGradientColor {
self.layer.masksToBounds = true
gradientLayer.frame = bounds
gradientLayer.colors = [topGradient.cgColor, bottomGradient.cgColor]
gradientLayer.borderColor = layer.borderColor
gradientLayer.borderWidth = layer.borderWidth
gradientLayer.cornerRadius = layer.cornerRadius
layer.insertSublayer(gradientLayer, at: 0)
} else {
gradientLayer.removeFromSuperlayer()
}
}
}
使用该自定义 class 我可以在 Interface Builder 上设置渐变颜色,并立即在我的故事板上看到结果。
问题是:当我将方向切换为水平方向时,我的按钮只绘制了一半。
好像由于某种原因没有应用新调整大小的参数。 好像是什么问题?
将此添加到您的 GradientButton
class:
override var bounds: CGRect {
didSet {
setGradient(topGradientColor: topGradientColor, bottomGradientColor: bottomGradientColor)
}
}