私は奇妙な問題があります。私はテーブルビューを持っており、セルにはビデオが含まれています。 AVPlayerLayerをセルのサイズに合わせて設定しますが、最初に読み込んだときは最初の2つのセルだけではありません。セル3 +は正しくロードされ、テーブルビューを下から上にスクロールすると、セルは最初の2に正しくロードされます。私は13秒のYouTubeビデオを作成して、私の意味を正確に示しました。ビデオの最初の数秒間に最初の2つのセルの下部にある空白に注目してください。バックアップをスクロールすると、その領域は存在しません。AVPlayerLayerの境界は正しいです。ここでAVPlayerLayerは境界変更時にのみ正しく設定されます
https://www.youtube.com/watch?v=q7BlZd77QVU
のtableViewセルを設定し、私のコードはcellForRowAtIndexPathで、次のとおりです。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *mov = @".mov";
NSString *fullComponent = [NSString stringWithFormat: @"%@%@", self.videoChallengeID, mov];
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:fullComponent];
NSURL *url = [NSURL fileURLWithPath:fullPath];
UIView *blueView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, videoCell.frame.size.width, videoCell.frame.size.height)];
blueView.backgroundColor = [UIColor blueColor];
[videoCell.contentView insertSubview:blueView belowSubview:videoCell.bottomView];
videoCell.item = [AVPlayerItem playerItemWithURL:url];
self.player = [[AVPlayer alloc] initWithPlayerItem:videoCell.item];
[self.player setMuted:YES];
self.player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
playerLayer.frame = CGRectMake(0, 0, videoCell.frame.size.width, videoCell.frame.size.height);
playerLayer.backgroundColor = [UIColor lightGrayColor].CGColor;
playerLayer.videoGravity = AVLayerVideoGravityResize;
[blueView.layer addSublayer:playerLayer];
[self.player play];
私ははっきりフレームを正しく設定し、それが動作しますが、ロード最初の2つのセルを除いて、テーブルビューが初めてロードされたとき。たびに正しく機能します。何が起こっているのだろうか?あなたのセルに
で正しくビデオレイヤーのフレームを設定していますそれが何であるべきかに設定されています。それらが再利用されるとき、それはうまくいくが、彼らが最初にインスタンス化されるときではない。あなたがすべきことは、カスタムUItableViewCellサブクラスを作成し、次に 'layoutSubviews'関数でビデオレイヤーのフレームを適切に設定することです。 –
これを答えに入れて、正しいとマークします。ありがとう! – joey
完了、ありがとうございました –