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

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

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

Войти через центр авторизации
Похожие вопросы