2015-06-09 45 views
1

我產生我在我的視圖控制器視圖現在這個樣子:具有空值的CGRect?

-(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]; 

    } 

這是林從以前的控制器通過

編輯:

* * * * 


* * * * 
* * * * 


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



* * * * 
*   * 
    * * 

這一切的安排,我需要例如

+0

展示你是如何傳遞的數據,這將有助於更多。 –

+0

編輯我的問題 – Sausagesalad

+0

它會是完全隨機的,還是你有一個固定的位置,你不想出現? – Felipe

回答

1

首先,讓我們把幀計算成一個單獨的方法:

- (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_ROW6

* * * * * * 
    * *  * * 
    * * * * * * 
+0

謝謝你的工作 – Sausagesalad