CGRectMake 4 行,每行水平位移?
CGRectMake 4 Lines with horizontal displacement for each line?
我有一个方法:
-(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;
}
}
}
所以,我的问题是,如何为每条线制作水平位移,例如,第二条线相对于第一条和第三条线发生位移。
编辑:
我的按钮视图现在看起来像这样:(简单)
* * * * *
* * * * *
* * * * *
* * * * *
但在某些视图中,我希望它们像这样放置:
* * * * *
* * * * *
* * * * *
* * * * *
我希望这是可以理解的...
编辑2:
现在可以使用了!
但是我怎样才能用我的 cgrectmake 制作这样的东西:
*
* *
* * *
编辑 3:
如果我想做这样的事情:
* * * * * *
* * * * *
* * * * * *
* * * * *
这使得:
* * * * *
* * * * * *
* * * * *
不知道为什么...
稍微拆分一下您的代码,让这更容易。创建 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;
}
}
}
我有一个方法:
-(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;
}
}
}
所以,我的问题是,如何为每条线制作水平位移,例如,第二条线相对于第一条和第三条线发生位移。
编辑:
我的按钮视图现在看起来像这样:(简单)
* * * * *
* * * * *
* * * * *
* * * * *
但在某些视图中,我希望它们像这样放置:
* * * * *
* * * * *
* * * * *
* * * * *
我希望这是可以理解的...
编辑2:
现在可以使用了!
但是我怎样才能用我的 cgrectmake 制作这样的东西:
*
* *
* * *
编辑 3:
如果我想做这样的事情:
* * * * * *
* * * * *
* * * * * *
* * * * *
这使得:
* * * * *
* * * * * *
* * * * *
不知道为什么...
稍微拆分一下您的代码,让这更容易。创建 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;
}
}
}