2011-08-09 208 views
1

我试图在iPad的纵向和横向视图中显示网格视图。现在我只是试图在纵向视图中将其取消,所以你会在下面的代码中看到相应的X,Y,我被卡住了。显示视频的网格视图

- (void)renderPlaylist { 
cellsArray = [[NSMutableArray alloc] init]; 
CGFloat xPos = 0.0f; 
CGFloat yPos = 0.0f; 
int i = 4; 
int y = 1; 
int p = 1; 

for (BCVideo *video in [[self playlist] videos]) { 

if (i > 0) { 
    ScrollCellViewController *cell = [[ScrollCellViewController alloc] initWithBCVideo:video]; 
    [cell setDelegate:self]; 
    [[cell view] setFrame:CGRectMake(xPos, yPos, 768.0f, 245.0f)]; 

    [scrollView addSubview:[cell view]]; 
    [cellsArray addObject:cell]; 
    yPos = y * 235.0f; 
    y++; 
    i--; 
}else{ 
    i = 4; 
    xPos = p * 245.0f; 
    yPos = 0.0f; 
    y = 1; 
    p++; 
} 
    //blabla lazy 
    CGSize size = CGSizeMake(2000.0f, 2000.0f); 
    [scrollView setContentSize:size]; 
} 

}

的视频的总数就是17。我想在每行中显示4个视频,然后向右移动,用于下一行,滚动视图将是水平的(如TED应用)。显然需要显示4行4行,然后显示1行。这样当前输出3行4行,然后是2行1行。总共14行?

什么?

正好。

如果我将代码调整为5行,总共可以获得15个视频。如果我只是6行的代码,你总共得到16个视频。

截图http://i53.tinypic.com/15oj687.png

回答

0

解决方案:

- (void)renderPlaylist { 
cellsArray = [[NSMutableArray alloc] init]; 
CGFloat xPos = 0.0f; 
CGFloat yPos = 0.0f; 

// y => counter for position of vertical videos 
int y = -1; 
// p => number of rows 
int p = 0; 
// r => check 
int r = 0; 

for (BCVideo *video in [[self playlist] videos]) { 
    r++; 
// vertical rows 
if (y < 3) { 
    y++;  
    yPos = y * 200.0f; 
}else{ 
    // move sideways to the right one row, and reset the vertical row 
    p++; 
    xPos = p * 255.0f; 
    yPos = 0.0f; 
    y = 0; 
} 
    //print video 
    ScrollCellViewController *cell = [[ScrollCellViewController alloc] initWithBCVideo:video]; 
    [cell setDelegate:self]; 
    [[cell view] setFrame:CGRectMake(xPos, yPos, 255.0f, 210.0f)]; 

    [scrollView addSubview:[cell view]]; 
    [cellsArray addObject:cell]; 
    CGSize size = CGSizeMake(xPos + 250.0f, 1024.0f); 
    [scrollView setContentSize:size]; 
} 
} 
+0

事情是,我只在If()声明和几次打印视频,如果不适用,所以视频没有打印!这很简单。 – MaikelS

0

你的代码是错误的几个部分。 通过跟随它,并调用U的上部的“如果”和L的下半部分,你重复这种模式: UUUULUUUULUUUUUUU 现在每隔4你计算y = 4 * 235 = 940作为左上角它可能超出了你的视野(例如,如果你有一个导航栏,你的视图高度将正好是940像素的高度!)。因此,第四行因为屏幕外而不可见。 除了每个U循环画一个768像素宽和245高的视图,所以它是一个水平条纹。现在前三部影片中的前三部分画出了前三部,第四部则画出了画面。然后,“L”什么都不做,它跳过视频(原文!)并设置“p”,使得下一个4条纹序列向右移动245px,这可能是错误的,因为条纹仍然是768px宽,所以下一个周期这些条纹将部分超出屏幕(在右边界)。除此之外,当你开始绘制UUUU的第二个序列时,你将覆盖现有的序列,但向右移动245px。

嗯,我不知道你想要做什么,但它似乎相当复杂的网格,它显然是越野车。您应该先照顾您的“滑动”代码,然后通过在控制台中打印所有视频的位置并尝试进行调试,从而进行调试。不要试图通过在参数中查找幻数来修复它。

+0

我添加了一个屏幕截图澄清了一点。 http://i53.tinypic.com/15oj687.png – MaikelS

+0

你能解释一下你想要显示视频的顺序吗? (那么应该如何将1到17的视频放入网格?)。此外,为什么每个ScrollCellViewController的宽度为768.0,并且你重叠?我会为每行创建一个水平的ScrollCellViewController(如此4行),然后我会将这些缩略图添加为每个滚动条内的子单元。 – viggio24

+0

视频的顺序是在屏幕截图中看到的顺序,我为它们编号。 ScrollCellViewController起源于另一个视图,并被破解创建它,这对功能无关紧要。 – MaikelS