Невозможно создать 108 точек по кругу - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь создать 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 голосов
/ 27 апреля 2019

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

0 голосов
/ 19 апреля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...