gpt4 book ai didi

swift - 具有 IBInspectable 颜色属性的子类 - 无法覆盖

转载 作者:行者123 更新时间:2023-11-28 13:42:02 27 4
gpt4 key购买 nike

我有一个带有 IBInspectable 颜色属性的自定义 UIView 类:

class MyParent: UIView {
// use CGColor for setting background (a gradient), and IBInspectable UIColor to choose color in Interface Builder
var color1: CGColor = UIColor(red: 100.0/255.0, green: 130.0/255.0, blue: 230.0/255.0, alpha: 1.0).CGColor
var color2: CGColort = UIColor(red: 200.0/255.0, green: 30.0/255.0, blue: 30.0/255.0, alpha: 1.0).CGColor
@IBInspectable var UIcolor1: UIColor = UIColor(red: 100.0/255.0, green: 130.0/255.0, blue: 230.0/255.0, alpha: 1.0) {
didSet {
color1 = UIcolor1.cgColor
}
}

// INIT: Set gradient with color1/2 for the background of MyParent view
override init(frame: CGRect) {
super.init(frame: frame);
var gradient = CAGradientLayer()
gradient.frame = bounds
gradient.colors = [color1, color2]
layer.insertSublayer(gradient, at: 0)
}
}

澄清更新:以这种方式完成,以便能够在 Interface Builder 中选择一种颜色(仅可能使用 UIColor),但是由于 View 的背景是渐变,它需要转换成 CGColor。因此 didSet 完成了这项工作,并且在 IB 中选择了一个 UIColor 之后,背景分别发生了变化。

现在我想要另一个自定义的 UIView,它是 MyParent 的子类,我想设置另一个默认的 UIcolor1,但是我得到一个错误:

class MySubclass: MyParent {
// override UIcolor1
override var UIcolor1: UIColor = UIColor.blue

// ...
}

以下错误:

Cannot override the stored property 'UIcolor1'

我怎样才能让它工作?

最佳答案

如果你不想在初始化中设置你的颜色,我认为你可以在这里做最好的事情

class MySubclass: MyParent {
// override UIcolor1
override var UIcolor1: UIColor {
get {
return .blue
}
set {
color1 = newValue.cgColor
}
}
// ...
}

代码编辑后

我认为没有必要对 View 进行子类化。这是工作代码

@IBDesignable
class MyParent: UIView {
// use CGColor for setting background, and IBInspectable UIColor to choose color in Interface Builder
var color1: UIColor = UIColor.blue {
didSet {
gradientLayer.colors = [color1.cgColor, color2]
}
}

var color2: CGColor = UIColor.green.cgColor

@IBInspectable var inspectableColor1: UIColor {
get {
return color1
}
set {
color1 = newValue
}
}

private var gradientLayer = CAGradientLayer()
// INIT: Set color1 for the background of MyParent view
// ...
override init(frame: CGRect) {
super.init(frame: frame)
setupLayer()
}

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

func setupLayer() {
gradientLayer.frame = bounds
gradientLayer.colors = [color1.cgColor, color2]
layer.insertSublayer(gradientLayer, at: 0)
}
}

关于swift - 具有 IBInspectable 颜色属性的子类 - 无法覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55888324/

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