开发者

Programmatically create a grid of UIViews (or any object with a view)

I'm making a game where a grid that is x by y square views big. What I'd like to do is be able to create the grid programmatically.

I had something along these lines in mind.

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

If pos开发者_JAVA百科sible I'd also like to keep a reference to each, ideally by assigning tags so I can manipulate them later..

Cheers

S


I think this should do the trick

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];
}


Basically it's just a matter of setting the grid sizes and then calculating the x and y positions from there.
It should calculate how many columns across based on the frame size. So that if the frame widens it will show more columns. Not sure if you need it to be resolution independent or not but I've put that in there.

If you need a set number of columns in the grid then just change gridColumns to be a fixed integer.

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));

}

Then basically in your loop you call getxOffset and getyOffset for the index of your loop to get the position of the grid.
I have manually set the x and y paddings in there to be 10 and 20, but you can set them to whatever you need.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜