显示视频的网格视图

时间:2011-08-09 11:52:25

标签: objective-c ipad

我正在尝试在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,然后是一行1.这当前输出3行4,然后1行2.总共14?

什么?

准确。

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

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

2 个答案:

答案 0 :(得分:0)

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

嗯,我不知道你想做什么,但对于一个网格而言似乎相当复杂,而且它显然是错误的。您应该先处理“刷卡”代码,然后通过在控制台中打印所有视频的位置并尝试调试它来调试它。不要试图通过在参数中查找幻数来修复它。

答案 1 :(得分: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];
} 
}