2011-08-09 13 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]; 
} 

}

動画の合計はI、各列に4本のビデオを表示し、右に移動する17で、次の行のため、スクロールビューは水平になります(TEDアプリ等)。明らかに、4行4行、1行1行を表示する必要があります。これは現在、4行3行、次に1行2行を出力します。

何ですか?

コードを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を "if"の上部とifの下部を呼び出して、このパターンを繰り返します: UUUULUUUULUUUULUU 今度は4番目ごとにy = 4 * 235 = 940を左上隅として計算しますおそらくあなたの視野から外れています(例えば、ナビゲーションバーがある場合、視野の高さは正確に940ピクセルの高さになります)。したがって、4行目は画面外で表示されません。 各Uサイクルに加え、幅768ピクセル、高さ245のビューが描画されるため、水平ストライプです。今、最初の3つのビデオの最初の3つのビデオが最初の3つのビデオを、4番目のUがビデオのアウトラインを描画します。次に "L"は何もしません。ビデオをスキップして、4つのストライプの次のシーケンスが245px右にシフトするように "p"を設定します。ストライプが768pxのままなので、おそらくバグです。サイクルでは、これらの縞模様は部分的に画面の外に出てしまいます(右の枠線を越えて)。あなたがUUUUの2番目のシーケンスを描き始めると同時に、既存のものを上書きしますが、245px右にシフトします。

あなたがしたいことはわかりませんが、グリッドにとってはかなり複雑に見えますが、明らかにバグです。前もって "スワイプ"コードを処理してから、すべてのビデオの位置をコンソールに出力してデバッグしようとすると、デバッグできます。パラメータ内のマジックナンバーを探して修正しようとしないでください。

+0

私はそれを少し明確にするスクリーンショットを追加しました。 http://i53.tinypic.com/15oj687.png – MaikelS

+0

ビデオを表示する順序を説明できますか? (どのようにして1から17までのビデオをグリッドに配置するのか?)さらに、なぜ各ScrollCellViewControllerの幅が768.0で、重複しているのですか?行ごとに1つの水平なScrollCellViewController(4行)を作成してから、これらのスクロールバーの内側にサブセルとしてサムネイルを追加します。 – viggio24

+0

ビデオの順番は、スクリーンショットに表示されている順番です。番号が付けられています。 ScrollCellViewControllerは別のビューから生成され、これを作成するためにハッキングされていますが、機能には関係ありません。 – MaikelS

関連する問題