CGRect,每行可变按钮

时间:2015-05-24 10:58:52

标签: objective-c view cgrect

以下情况:

我想建立一个cgrect。我需要的是:最多4行。最多6列。

所以例如它必须如何看待:

我需要分钟。

+ + + + (1行,4个按钮)

并且我需要:

+ + + + + + + + + + + + + + + + + + + + + +

(4行,22个按钮)

我想要的是传递来自其他BUTTONS_FOR_ROW1-4的{​​{1}}数据。对于min示例,这是button_for_row1 = 4,button_for_row2 = 0,button_for_row3 = 0,button_for_row4 = 0.

表示最大例子button_for_row1 = 6,button_for_row2 = 5,button_for_row3 = 6,button_for_row4 = 5

我的代码现在是这样的:

VC

正如您所看到的,我的代码现在只有BUTTONS_PER_ROW而不是BUTTONS_FOR_ROW1 - 。

缩进用于向左或向右推动一行。

但我认为这会更容易,因为我的代码在制作22个按钮时会得到一些奇怪的东西。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您的基本逻辑可以简化。我会在这里使用while循环。对于每行按钮数量最多的情况(更简单的情况),这是我认为可以做到你想要的明确方式的概述:

y = .... (initial value of y)
NSUInteger numberOfButtons = [self.gameModel.buttons count];

// Layout out the buttons, with no more than _BUTTONS_PER_ROW in each row

NSUInteger buttonsLeft = numberOfButtons;
NSUInteger buttonsInRow = 0;
while(buttonsLeft>0)
{

    if(buttonsInRow>_BUTTONS_PER_ROW)
    {
        // Increment y, reset x
        y += ....
        x = .... (initial position for x)
        buttonsInRow = 0;
    }
    // Create a button
    CGRect frame = CGRectMake(x, y, 125, 125);
    ButtonView* buttonView = [[ButtonView .....
    x += 80;

    ++buttonsInRow;
    --buttonsLeft;
}

对于更一般的情况,添加一个变量来跟踪行号,并使用和数组在进入while循环之前每行加载的最大按钮数。