CGRectMake 4行每行有水平位移?

时间:2015-05-06 00:04:22

标签: ios objective-c cgrectmake

我有一个方法:

-(void) generateButtons {
int positionsLeftInRow = BUTTONS_PER_ROW;
int j = 0;

for (int i = 0; i < [self.Model.buttons count]; i++) {
    NSInteger value = ((Model *)self.Model.buttons[i]).value;

    ButtonView *cv = [[ButtonView alloc] initWithFrame:CGRectMake((i % BUTTONS_PER_ROW) * 121 + (i % BUTTONS_PER_ROW) * 40 + 205, j * 122 + j * 40 + 320, 125, 125) andPosition:i andValue:value];

    if (!((Model *)self.Model.buttons[i]).outOfPlay) {
        [self.boardView addSubview:cv];


        if ([self.Model.usedButtons containsObject: self.Model.buttons[i]]) {

            [self.usedButtons addObject: cv];

            [cv flip];

        }
    }

    if (--positionsLeftInRow == 0) {
        j++;
        positionsLeftInRow = BUTTONS_PER_ROW;
    }
}

}

所以,我的问题是,如何为每一行进行水平位移,例如第二行从第一行和第三行取代。

编辑:

我的按钮视图现在看起来像这样:(简单)

*  *  *  *  *
*  *  *  *  *
*  *  *  *  * 
*  *  *  *  *

但在某些观点中,我希望它们的位置如下:

*  *  *  *  *  
 *  *  *  *  *
*  *  *  *  *  
 *  *  *  *  *

我希望这是可以理解的......

EDIT2:

现在正在运作!

但我怎么能用My cgrectmake制作这样的东西:

  *
 * *
* * *

EDIT3:

如果我想做这样的事情:

*  *  *  *  *  *
 *  *  *  *  *
*  *  *  *  *  *
 *  *  *  *  *

这样做:

 *  *  *  *  *
*  *  *  *  *  *
 *  *  *  *    *  

不知道为什么......

1 个答案:

答案 0 :(得分:1)

通过稍微分割您的代码,使这更容易。创建ButtonView的行应为:

CGFloat x = (i % BUTTONS_PER_ROW) * 121 + (i % BUTTONS_PER_ROW) * 40 + 205;
CGFloat y = j * 122 + j * 40 + 320;
CGRect frame = CGRectMake(x, y, 125, 125);
ButtonView *cv = [[ButtonView alloc] initWithFrame:frame andPosition:i andValue:value];

这使您的代码更易于阅读和调试。

现在您需要为每隔一行调整x值。

添加:

if (j % 2) {
    x += 20; // set to whatever additional indent you want
}

所以你的最终代码变成了:

-(void) generateButtons {
    int positionsLeftInRow = BUTTONS_PER_ROW;
    int j = 0;

    for (int i = 0; i < [self.Model.buttons count]; i++) {
        NSInteger value = ((Model *)self.Model.buttons[i]).value;

        CGFloat x = (i % BUTTONS_PER_ROW) * 121 + (i % BUTTONS_PER_ROW) * 40 + 205;
        if (j % 2) {
            x += 20; // set to whatever additional indent you want
        }
        CGFloat y = j * 122 + j * 40 + 320;
        CGRect frame = CGRectMake(x, y, 125, 125);
        ButtonView *cv = [[ButtonView alloc] initWithFrame:frame andPosition:i andValue:value];

        if (!((Model *)self.Model.buttons[i]).outOfPlay) {
            [self.boardView addSubview:cv];

            if ([self.Model.usedButtons containsObject: self.Model.buttons[i]]) {
                [self.usedButtons addObject: cv];
                [cv flip];
            }
        }

        if (--positionsLeftInRow == 0) {
            j++;
            positionsLeftInRow = BUTTONS_PER_ROW;
        }
    }
}