2017-05-08 3 views
0

セルが全幅がUIImageViewで、インラインビデオを再生するためにAVPlayerLayerを作成しています。これはほぼ完全に機能します。唯一の問題は、画像ビューのpreviewImageに追加したときに完全に表示されるフルサイズの画像ビューであり、左側と右側に1ピクセルのギャップがあることです。だから、ビデオが再生されているとき、あなたはそれに本当に気付くことができ、それはかなり嫌です。サブレイヤとしてAVPlayerLayerを追加すると、親ビューが完全に塗りつぶされません。

私はそうのようにそれを設定しています:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    tableView.deselectRow(at: indexPath, animated: false) 

    let cell = tableView.cellForRow(at: indexPath) as! GameMediaCell 

    if (cell.playerLayer != nil) { 
     cell.playerLayer?.player?.pause() 
     cell.playerLayer?.removeFromSuperlayer() 
     cell.playerLayer = nil 

    } else { 
     if let clipURI = viewModel?.mediaURIForIndex(indexPath.row) { 

      let player = AVPlayer(url: clipURI) 
      let playerLayer = AVPlayerLayer(player: player) 

      playerLayer.frame = cell.previewImage.frame 

      cell.previewImage.layer.addSublayer(playerLayer) 
      cell.playerLayer = playerLayer 

      playerLayer.player?.play() 
     } 
    } 
} 

答えて

4

はサブビューとしてプレイヤー層を追加する前にこの行を追加します。

self.playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill

+0

を、私はどこか他の日にこれを発見し、それが正しい答えです。私自身の質問に答えるべきだったので、私はこれを受け入れます。ありがとう :) – user1898712

0

これが私の仕事:

//MARK: Add a new variable to your class where you are using AVPLayer 
let screenRect = UIScreen.mainScreen().bounds 

//MARK:Than just create a new frame of AVPLayerLayer 
self.avPlayerLayer!.frame = CGRectMake(0, 0, self.screenRect.size.width, self.screenRect.size.height) 
関連する問題