无法在圆中创建 108 个点
Unable to create 108 dots in a circle
我试图在一个圆圈中创建 108 个点,但出现索引超出范围错误。这些点是使用 UILabel 数组创建的。
我有以下代码:
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
class 中设置标签的角半径和边框宽度的代码?
我想通了。我将 UIBezier 路径半径添加到围绕圆的 UILabels 的 x 和 y 坐标并且它有效
我试图在一个圆圈中创建 108 个点,但出现索引超出范围错误。这些点是使用 UILabel 数组创建的。
我有以下代码:
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
class 中设置标签的角半径和边框宽度的代码?
我想通了。我将 UIBezier 路径半径添加到围绕圆的 UILabels 的 x 和 y 坐标并且它有效