gpt4 book ai didi

ios - 在 Swift 3.1 中使用自定义 Setter 更新数组属性

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

我有一个类,我想使用 Storyboard 为 CAGradientLayer 设置最多 4 个 UIColor。

我正在使用一个数组来跟踪从 Storyboard设置的 UIColors。

当用户设置颜色时,我想将其添加到数组中,如果他们将颜色设置为空(这可能吗?),我想将其从数组中删除。

渐变层将具有 2 到 4 种颜色。

下面的代码是我想出的,但如果可能的话,我正在寻找更简洁的代码。

class ViewController: UIViewController {

var gradientLayer = CAGradientLayer()
var gradientColors = [UIColor]()


@IBInspectable var color1Value: UIColor?
{
didSet {
self.updateGradientLayer()
}
}

@IBInspectable var color2Value: UIColor? {
didSet {
self.updateGradientLayer()
}
}

@IBInspectable var color3Value: UIColor? {
didSet {
self.updateGradientLayer()
}
}

@IBInspectable var color4Value: UIColor? {
didSet {
self.updateGradientLayer()
}
}


func updateGradientLayer() {
gradientColors.removeAll()
gradientColors.append(color1Value!)
gradientColors.append(color2Value!)
gradientColors.append(color3Value!)
gradientColors.append(color4Value!)

gradientLayer.colors = gradientColors
}



override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}

最佳答案

我不熟悉 CAGradientLayer 的使用,但我建议创建一个实际的可选颜色数组并使用 flatMap 来消除丢失的颜色值。像这样的东西。

var gradientLayer = CAGradientLayer()
var gradientColors: [UIColor?] = [nil, nil, nil, nil] {
didSet {
gradientLayer.colors = gradientColors.flatMap { $0 }
}
}

然后通过索引访问gradientColors数组,对任何索引的任何更改都会更新渐变层。

viewController.gradientColors[1] = .red
viewController.gradientColors = [.black, nil, .blue, .yellow]

我原来的回复没有处理每种颜色都是 IBInspectable 的要求。如果需要,您可以执行类似的操作,但现在您的代码行数几乎相同。

@IBInspectable var gradientColor1: UIColor? {
didSet {
gradientColors[0] = gradientColor1
}
}
// ... for other colors.

关于ios - 在 Swift 3.1 中使用自定义 Setter 更新数组属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42985960/

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