【发布时间】:2018-07-27 03:28:15
【问题描述】:
【问题讨论】:
-
您可以在
UIImageView上布局一个按钮,或者使用setBackgroundImage(for:)指定图像 - 如果您想在其下方显示某些内容,可以使用线性渐变和透明度...跨度>
【问题讨论】:
UIImageView 上布局一个按钮,或者使用setBackgroundImage(for:) 指定图像 - 如果您想在其下方显示某些内容,可以使用线性渐变和透明度...跨度>
声明新的按钮子类:
class GradientButton : UIButton {
var leftColor = UIColor.red
var rightColor = UIColor.green
var customImage : UIImage? {
didSet {
updateImageView()
}
}
let gradientLayer = CAGradientLayer()
let customImageView = UIImageView()
override var frame: CGRect {
didSet {
gradientLayer.frame = bounds
layer.layoutIfNeeded()
}
}
convenience init(leftColor: UIColor, rightColor: UIColor, image: UIImage) {
self.init()
self.leftColor = leftColor
self.rightColor = rightColor
customImage = image
updateImageView()
}
override init(frame: CGRect) {
super.init(frame: frame)
defaultInitializer()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
defaultInitializer()
}
func defaultInitializer() {
gradientLayer.frame = bounds
gradientLayer.colors = [leftColor.cgColor, rightColor.cgColor]
gradientLayer.startPoint = CGPoint.init(x: 0, y: 0.5)
gradientLayer.endPoint = CGPoint.init(x: 1, y: 0.5)
layer.insertSublayer(gradientLayer, at: 0)
layer.layoutIfNeeded()
addSubview(customImageView)
customImageView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
}
func updateImageView() {
customImageView.image = customImage
customImageView.alpha = 0.2
layoutSubviews()
}
}
然后像这样初始化:
let rect = CGRect(x: 20, y: 20, width: 200, height: 100)
let button = GradientButton(leftColor: UIColor.red, rightColor: UIColor.cyan, image: UIImage(named: "1")!)
button.frame = rect
self.view.addSubview(button)
甚至还有故事板。
其他设置,如文本颜色、字体等,您可以在 UIButton 声明中找到。 编码愉快!
【讨论】:
@IBOutlet var finishButton: GradientButton! 这样的插座,那么我们如何通过convenience init(leftColor: UIColor, rightColor: UIColor, image: UIImage) 设置颜色?