gpt4 book ai didi

ios - 在 for 循环中创建 CGRect 并将其分配给 UIView

转载 作者:行者123 更新时间:2023-11-28 11:03:48 25 4
gpt4 key购买 nike

我正在循环 [UIView],设置它们的框架,然后将它们作为 subview 添加到 UIScrollView。在代码中,我分配了一个随机的背景颜色,这样我就可以区分 View 以进行测试:

for i in 0...questionViews.count - 1 {
let hue: CGFloat = CGFloat(arc4random() % 256) / 256
let saturation: CGFloat = CGFloat(arc4random() % 128) / 256 + 0.5
let brightness: CGFloat = CGFloat(arc4random() % 128) / 256 + 0.5

questionViews[i].backgroundColor = UIColor(hue: hue, saturation: saturation, brightness: brightness, alpha: 1)

questionViews[i].frame = CGRect(x: screen.width * CGFloat(i), y: 0, width: screen.width, height: screen.height)
questionsScrollView!.addSubview(questionViews[i])
}

但是,如果我遍历这些并打印它们:

for i in 0...questionViews.count - 1 {
print(questionViews[i].frame)
}

结果将是:

(3000.0, 0.0, 375.0, 667.0)
(3000.0, 0.0, 375.0, 667.0)
(3000.0, 0.0, 375.0, 667.0)
(3000.0, 0.0, 375.0, 667.0)
(3000.0, 0.0, 375.0, 667.0)
(3000.0, 0.0, 375.0, 667.0)
(3000.0, 0.0, 375.0, 667.0)
(3000.0, 0.0, 375.0, 667.0)
(3000.0, 0.0, 375.0, 667.0)

为什么每个 CGRect 都有来自 for 循环的最终值 x?

编辑:

questionViews 数组在 init 中设置,只有空的 CGRects 开头:

questionViews = [UIView](count: numberOfQuestions, repeatedValue: UIView(frame: CGRect()))

最佳答案

当创建一个包含引用类型重复值的数组时,它只创建一个项目并将所有索引指向该项目。因此,在您的 for 循环中,您一遍又一遍地敏锐地设置那个 UIView 的所有索引的框架。

替换这个:

questionViews = [UIView](count: numberOfQuestions, repeatedValue: UIView(frame: CGRect()))

var questionViews = [UIView]()
for _ in 0..<numberOfQuestions {
questionViews.append(UIView(frame: CGRect()))
}

关于ios - 在 for 循环中创建 CGRect 并将其分配给 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39501941/

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