gpt4 book ai didi

swift - 无法在圆圈中创建 108 个点

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

我试图在一个圆圈中创建 108 个点,但出现“索引超出范围”错误。这些点是使用 UILabels 数组创建的。

我有以下代码:

func createMala() {
let malaFrame = UIView()
malaFrame.frame = CGRect(x: 0, y: 0, width: view.frame.width - 20, height: view.frame.width - 20)
malaFrame.center = CGPoint(x: view.frame.width / 2.0, y: (malaFrame.frame.height / 2.0) + 20)

var malaBeadLabel = [RoundLabel]()
let malaRadius : Double = 100.0
let angleInRadians : Double = 3.3333 * .pi / 180.0

for i in 1...108 {
malaBeadLabel[i].frame = CGRect(x: (malaRadius * sin(angleInRadians) * Double(i)),
y: (malaRadius * cos(angleInRadians) * Double(i)),
width: 2.0, height: 2.0)

malaBeadLabel[i].layer.cornerRadius = 1.0
malaBeadLabel[i].layer.borderWidth = 0.25
malaBeadLabel.append(malaBeadLabel[i])

malaFrame.addSubview(malaBeadLabel[i])
}
}

我无法弄清楚索引是如何超出范围的。

最佳答案

您从一个名为 malaBeadLabel 的空数组开始。

然后在循环的第一次迭代期间,当 i 为 1 时,您尝试 malaBeadLabel[i]。这当然会导致错误,因为 malaBeadLabel 为空,并且索引 1(或 0,或任何其他索引)处没有任何内容。

最重要的是,您实际上从未尝试创建任何 RoundLabel 实例。

更改循环代码,这样您就不会尝试访问数组中的任何内容,而只需添加到数组中。并创建实际的标签实例。

for i in 1...108 {
let label = RoundLabel(frame: CGRect(x: (malaRadius * cos(angleInRadians * Double(i))),
y: (malaRadius * sin(angleInRadians * Double(i))),
width: 2.0, height: 2.0))

label.layer.cornerRadius = 1.0
label.layer.borderWidth = 0.25
malaBeadLabel.append(label)

malaFrame.addSubview(label)
}

顺便说一句 - 为什么不在 RoundLabel 类中设置标签的角半径和边框宽度的代码?

关于swift - 无法在圆圈中创建 108 个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55756450/

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