无法在一个圆圈中创建108个点

时间:2019-04-19 04:04:42

标签: swift uilabel

我试图在一个圆圈中创建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])
        }
    }

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

2 个答案:

答案 0 :(得分:0)

您从一个名为console.log(calc(100, 3, 1, 15)); console.log(calc(100, 4, 1, 15)); console.log(calc(100, 10, 1, 15)); console.log(calc(100, 12, 1, 15)); function calc(base, firstYearMonths, increase, totalMonths) { let ret = base * firstYearMonths / 12; totalMonths -= firstYearMonths; let year = 1; while(totalMonths > 0) { ret += base * (1 + (increase * year) / 100) * Math.min(totalMonths, 12) / 12; totalMonths -= 12; year += 1; } return ret; }的空数组开始。

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

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

更改循环代码,以便您不尝试访问数组中的任何内容,只需将其添加到数组中即可。并创建实际的标签实例。

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) } 类中设置标签的拐角半径和边框宽度?

答案 1 :(得分:0)

我能够弄清楚这一点。我在圆周围的UILabel的x和y坐标上都添加了UIBezier路径半径,并且有效