具有空值的 CGRect?
CGRect with empty values?
我现在像这样在我的视图控制器中生成我的视图:
-(void) generateCardViews {
int positionsLeftInRow = _CARDS_PER_ROW;
int j = 0; // j = ROWNUMBER (j = 0) = ROW1, (j = 1) = ROW2...
for (int i = 0; i < [self.gameModel.cards count]; i++) {
NSInteger value = ((CardModel *)self.gameModel.cards[i]).value;
CGFloat x = (i % _CARDS_PER_ROW) * 121 + (i % _CARDS_PER_ROW) * 40 + 45;
if (j % 2) {
x += 80; // set additional indent (horizontal displacement)
}
CGFloat y = j * 85 + j * 40 + 158;
CGRect frame = CGRectMake(x, y, 125, 125);
CardView *cv = [[CardView alloc] initWithFrame:frame andPosition:i andValue:value];
我从之前的 VC 获取 _CARDS_PER_ROW 的数据。
但是现在我想把一些地方留空
现在我可以生成例如:
* * *
* * *
* * *
但我想生成这样的东西:
* * *
* *
* * *
但我不知道如何跳过某些地方以供我查看...
编辑:
- (void)viewDidLoad {
[super viewDidLoad];
level1GameViewController *gvc = [self.storyboard instantiateViewControllerWithIdentifier:@"level1GameViewController"];
gvc.CARDS_PER_ROW = 3;
//gvc.gameStateData = gameStateData;
[self presentViewController:gvc animated:NO completion:nil];
}
这是我从之前的控制器传来的
编辑:
* * * *
* * * *
* * * *
* * * * * *
* * * *
* * * * * *
* * * *
* *
* *
例如我需要的所有这些安排
首先我们把帧计算放到一个单独的方法中:
- (CGRect)frameForCardViewAtPositionI:(NSUInteger)i positionJ:(NSUInteger)j {
CGRect frame;
frame.size = CGSizeMake(125, 125);
frame.origin.x = i * frame.size.width + 45; //or whatever logic you need here
frame.origin.y = j * frame.size.height + 158;
return frame;
}
现在,让我们用一个掩码块指定卡片分配,我们将其作为参数发送:
- (void)generateCardViews:(BOOL (^)(NSUInteger, NSUInteger)cardAllowedOnPosition {
NSUInteger viewIndex = 0;
for (NSUInteger index = 0; index < [self.gameModel.cards count]; index++) {
NSInteger value = ((CardModel *)self.gameModel.cards[index]).value;
NSUInteger i, j;
do {
i = viewIndex % _CARDS_PER_ROW;
j = viewIndex / _CARDS_PER_ROW;
viewIndex++;
} while (!cardAllowedOnPosition(i, j));
CGRect frame = [self frameForCardViewAtPositionI:i positionJ:j];
CardView *cv = [[CardView alloc] initWithFrame:frame
andPosition:index
andValue:value];
}
}
称为
[self generateCardViews:^(NSUInteger i, NSUInteger j) {
return !(j == 1 && i > 1 && i < 4);
}];
生成(假设_CARDS_PER_ROW
为6
)
* * * * * *
* * * *
* * * * * *
我现在像这样在我的视图控制器中生成我的视图:
-(void) generateCardViews {
int positionsLeftInRow = _CARDS_PER_ROW;
int j = 0; // j = ROWNUMBER (j = 0) = ROW1, (j = 1) = ROW2...
for (int i = 0; i < [self.gameModel.cards count]; i++) {
NSInteger value = ((CardModel *)self.gameModel.cards[i]).value;
CGFloat x = (i % _CARDS_PER_ROW) * 121 + (i % _CARDS_PER_ROW) * 40 + 45;
if (j % 2) {
x += 80; // set additional indent (horizontal displacement)
}
CGFloat y = j * 85 + j * 40 + 158;
CGRect frame = CGRectMake(x, y, 125, 125);
CardView *cv = [[CardView alloc] initWithFrame:frame andPosition:i andValue:value];
我从之前的 VC 获取 _CARDS_PER_ROW 的数据。
但是现在我想把一些地方留空
现在我可以生成例如:
* * *
* * *
* * *
但我想生成这样的东西:
* * *
* *
* * *
但我不知道如何跳过某些地方以供我查看...
编辑:
- (void)viewDidLoad {
[super viewDidLoad];
level1GameViewController *gvc = [self.storyboard instantiateViewControllerWithIdentifier:@"level1GameViewController"];
gvc.CARDS_PER_ROW = 3;
//gvc.gameStateData = gameStateData;
[self presentViewController:gvc animated:NO completion:nil];
}
这是我从之前的控制器传来的
编辑:
* * * *
* * * *
* * * *
* * * * * *
* * * *
* * * * * *
* * * *
* *
* *
例如我需要的所有这些安排
首先我们把帧计算放到一个单独的方法中:
- (CGRect)frameForCardViewAtPositionI:(NSUInteger)i positionJ:(NSUInteger)j {
CGRect frame;
frame.size = CGSizeMake(125, 125);
frame.origin.x = i * frame.size.width + 45; //or whatever logic you need here
frame.origin.y = j * frame.size.height + 158;
return frame;
}
现在,让我们用一个掩码块指定卡片分配,我们将其作为参数发送:
- (void)generateCardViews:(BOOL (^)(NSUInteger, NSUInteger)cardAllowedOnPosition {
NSUInteger viewIndex = 0;
for (NSUInteger index = 0; index < [self.gameModel.cards count]; index++) {
NSInteger value = ((CardModel *)self.gameModel.cards[index]).value;
NSUInteger i, j;
do {
i = viewIndex % _CARDS_PER_ROW;
j = viewIndex / _CARDS_PER_ROW;
viewIndex++;
} while (!cardAllowedOnPosition(i, j));
CGRect frame = [self frameForCardViewAtPositionI:i positionJ:j];
CardView *cv = [[CardView alloc] initWithFrame:frame
andPosition:index
andValue:value];
}
}
称为
[self generateCardViews:^(NSUInteger i, NSUInteger j) {
return !(j == 1 && i > 1 && i < 4);
}];
生成(假设_CARDS_PER_ROW
为6
)
* * * * * *
* * * *
* * * * * *