Программно создать сетку UIViews (или любой объект с видом) - PullRequest
0 голосов
/ 27 июня 2011

Я создаю игру, в которой сетка размером x на y имеет большой вид.Я хотел бы создать сетку программно.

Я имел в виду что-то в этом роде.

int across = x
int down = y
CGRect dimentions = foo, bar //etc
int distanceBetween = z
///some crazy loop to make it

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

Приветствия

S

Ответы [ 2 ]

2 голосов
/ 27 июня 2011

Я думаю, что это должно сработать

int across = x
int down = y
CGSize dimensions; // make a cgsize here with the correct values
int distanceBetween = z;
NSMutableArray *views = [[NSMutableArray alloc] init];

for (int x = 0; x < across; x++) {
   NSMutableArray *downViews = [[NSMutableArray alloc] init];
   for (int y = 0; y < down; y++) {
     UIView *view; //create view using the dimensions and padding 
     //any additional setup to the views
     [downViews addObject:view];
   }
   [views addObject:downViews];
   [downViews release];
}
0 голосов
/ 27 июня 2011

По сути, это всего лишь вопрос установки размеров сетки, а затем вычисления оттуда координат x и y.
Он должен рассчитать количество столбцов в зависимости от размера кадра. Так что, если рамка расширяется, она покажет больше столбцов. Не уверен, если вам нужно, чтобы он был независимым от разрешения или нет, но я поместил это там.

Если вам нужно установить количество столбцов в сетке, просто измените gridColumns на фиксированное целое число.

float gridItemWidth = 225.00;
float gridItemHeight = 225.00;

-(int)gridColumns { 
    NSRect frame = [self frame];
    return (int)frame.size.width / (gridItemWidth);
}      

-(int)getxOffset:(int)i {
    int xPadding = 10;
    return ((i % [self gridColumns]) * (gridItemWidth  + xPadding));
}

-(int)getyOffset:(int)i {
    int yPadding = 20;
    return (floor(i / [self gridColumns]) * (gridItemHeight + yPadding));

}

Затем в основном в вашем цикле вы вызываете getxOffset и getyOffset для индекса вашего цикла, чтобы получить положение сетки.
Я вручную установил там отступы x и y на 10 и 20, но вы можете установить для них все, что вам нужно.

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