我正在制作一个游戏,其中x平方的网格视图很大。我想做的是能够以编程方式创建网格。
我记住了这些内容。
int across = x
int down = y
CGRect dimentions = foo, bar //etc
int distanceBetween = z
///some crazy loop to make it
如果可能的话,我也想保留对每个标记的引用,理想情况是通过分配标记,以便我以后可以操作它们。
干杯
取值
答案 0 :(得分:2)
我认为这应该可以解决问题
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];
}
答案 1 :(得分:0)
基本上只需设置网格大小然后从那里计算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,但您可以将它们设置为您需要的任何颜色。