Задать вопрос
@anonymous22

Заполнить view кнопками?

Я хочу заполнить UIView кнопками с рандомными позициями, таким образом что бы они не пересекались между собой

Моя идея:
-создать первую кнопку и разместить ее на рандомную позицию
-заполнить view остальными кнопками(<20), таким образом что бы они не пересекались.

Что я сделал:

-(void)generateButtonsForView:(UIView *)view buttonCount:(int)count
    {
    //get size of main view
        float viewWidth = view.frame.size.width;
        float viewHeight = view.frame.size.height;
        
        //set button at random position
        UIButton *initialButton = [[UIButton alloc] initWithFrame:CGRectMake(arc4random() % (int)viewWidth, arc4random() % (int)viewHeight, buttonWidth, buttonHeight)];
        
        [initialButton setBackgroundImage:[UIImage imageNamed:@"button"] forState:UIControlStateNormal];
        
        [view addSubview:initialButton];
        
        // set count to 20 - max number of buttons on screen
        if (count > 20)
            count = 20;
        
        //fill view with buttons from initial button +- 10 pixels
        for (int i=0;i<=count;i++)
        {
            //button
            UIButton *otherButtons = [[UIButton alloc] init];
            [otherButtons setBackgroundImage:[UIImage imageNamed:@"button"] forState:UIControlStateNormal];
            
            ...//have no idea what to do here
            
        }
    }

Я застопорился на моменте где нужно создать позиции остальных кнопок, в зависимости от начальной кнопки. Я не могу придумать как сгенерировать ихние позиции, что бы они были на расстоянии не больше 5-10 пикселей друг от друга.
  • Вопрос задан
  • 2528 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
kaspartus
@kaspartus
Немного не так как хочешь, но можно так:
1. Распиливаем вьюшку на горизонтальные полосы высотой 2 высоты кнопки + 10 точек(можно поиграться). По высоте между полосами сделать пропуск в 5 точек.
2. Каждую полосу вертикально разбиваем на ячейки(шириной в кнопку), горизонтальное расстояние между ними выбираем случайно между 5-10, в итоге ячейка имеет ширину кнопки и ее двойную высоту.
3. Кнопку помещаем в ячейку, положение по вертикали выбираем случайно. Итого расстояние как по вертикали так и по горизонтали будет на больше 10, а по горизонтали гарантировано больше 5
4. Повторяем для остальных полос(лучше добавить рандомное начальное горизонтальное смещение для кнопок). В итоге между "соответствующими" кнопками в соседних полосах будет в самом худшем случае 2 высоты кнопки + 25 точек.

4 пункт единственный не удовлетворяет условию. Все это дело можно оптимизировать, чтобы гарантировано прижимать кнопки в полосах к своему соседу сверху.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
alexyat
@alexyat
iOS Developer
а что мешает заполнять относительно первой рандомной кнопки по кругу от нее, или от каждой новой созданной последующей.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы