微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为 forEach 循环中的每个项目生成随机背景颜色

如何解决为 forEach 循环中的每个项目生成随机背景颜色

我想要做的是看看是否有可能在 for each 循环中为每个项目分配随机背景颜色。我尝试了以下内容,但无法编译。我知道有一种方法可以通过在 for each 之外设置一个变量并作为 uicolor 的一部分增加来做到这一点,但我想看看是否有办法在不创建变量的情况下做到这一点。

   var frontBox = UIButton()
var backBox = UIButton()


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    [frontBox,backBox,slider].forEach{
        $0.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview($0)
        $0.backgroundColor = ar4random().uicolor
    }
    

}

解决方法

Swift 不再使用 ar4random - 要获得随机数,您可以使用 .random(in: 0...1) or similar

此外,$0.backgroundColor 接受 UIColor,而不是数字。您可能正在寻找这样的东西:

$0.backgroundColor = UIColor(
    red: .random(in: 0...1),green: .random(in: 0...1),blue: .random(in: 0...1),alpha: 1
)

这组成了一个 UIColor from red,green,and blue components,每个都是从 01 的随机数。

,

这取决于您希望这些颜色的“随机”程度。如果您想要噪音,请使用 aheze 的建议。

如果你想要一些视觉上吸引人的东西,比如演示一个新的布局,试试这样的:

import UIKit

let stackView = UIStackView(frame: CGRect(x: 0,y: 0,width: 600,height: 100))
stackView.distribution = .fillEqually
let collection = 1...100
collection.forEach { i in
    let view = UIView()
    let hue = CGFloat(i) / CGFloat(collection.count)
    view.backgroundColor = UIColor.init(hue: hue,saturation: 1,brightness: 1,alpha: 1)
    stackView.addArrangedSubview(view)
}

关键是在 UIColor 上使用 init(hue:saturation:brightness:alpha:) API 并控制 hue 参数来更改颜色。
该示例应为您提供特定用例所需的一切。

操场截图:

visualization

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。