По сути, это всего лишь вопрос установки размеров сетки, а затем вычисления оттуда координат 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, но вы можете установить для них все, что вам нужно.