如何解决为 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,每个都是从 0
到 1
的随机数。
这取决于您希望这些颜色的“随机”程度。如果您想要噪音,请使用 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
参数来更改颜色。
该示例应为您提供特定用例所需的一切。
操场截图:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。