Я пытаюсь создать 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])
        }
    }

Я не могу понять, как индекс выходит за пределы диапазона.

0
ndarji 19 Апр 2019 в 07:04

2 ответа

Лучший ответ

Я смог понять это. Я добавил радиус траектории UIBezier к координатам x и y меток UIL вокруг круга, и это сработало

0
ndarji 27 Апр 2019 в 13:04

Вы начинаете с пустого массива с именем 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?

0
rmaddy 19 Апр 2019 в 14:38