2016-11-29 8 views
1

UITableViewCellの中でAVPlayerを正常に使用する方法を工夫しています。この作品UITableViewCellでAVPlayerを処理する方法は?

let videoPlayer = AVPlayer(playerItem: AVPlayerItem(asset: cellVideo)) 
cell.playerView.player = videoPlayer 

:私は次のコードを使用して-cellForRowAtIndexPath:playerを設定

class PlayerView: UIView { 
    var player: AVPlayer? { 
     get { 
      return playerLayer.player 
     } 
     set { 
      playerLayer.player = newValue 
     } 
    } 

    var playerLayer: AVPlayerLayer { 
     return layer as! AVPlayerLayer 
    } 

    override class var layerClass : AnyClass { 
     return AVPlayerLayer.self 
    } 

} 

:私のUITableViewCell内部私は(アップルによって与えられた)、このコードを使用して、その中にAVPlayerLayerを持ってUIViewサブクラスを持っていますしかし、セルが見えないときは、ビデオを再生したくありません。 playerをnilに設定してから、セルが再び表示されたら、playerを再度設定するか、ビデオを一時停止する必要がありますか?それとも、別の方法で使用するべきですか?ときに呼び出され、私は個人的にcellForRowAt indexPathので、nilにプレーヤーをビデオを停止し、設定したい

optional func tableView(_ tableView: UITableView, 
    didEndDisplaying cell: UITableViewCell, 
      forRowAt indexPath: IndexPath) { 

} 

答えて

0

あなたは、細胞が視野の外にあるときにやりたい、このUITableViewDelegateメソッドを実装することができますセルが見えるようになります。

+0

YesにUITableViewCellのをキャストすることを確認したが、私は、この関数でやるべきものを求めていますか? – Tometoyou

+0

cellForRowAt indexPathでビューをどのように設定しますか? – Jeremy

+0

コードで質問を更新しました。 – Tometoyou

0

EDIT

はい、パフォーマンスを向上させるには、プレーヤをnilに設定する必要があります。 私はまた、再利用の準備メソッドをオーバーライドすることで、カスタムセルクラスでプレーヤーをnilに設定する必要があると思います。あなたの目標は、ニュースフィードの挙動を模倣する場合

override func prepareForReuse() { 
    player = nil 
    super.prepareForReuse() 
} 

はまた、私はそれはあなたが特定の時間に親指を表示してみましょうAVPlayer:PrerollAtRateを見てお勧めします。


デリゲートメソッドを使用して、プレーヤーを一時停止してから再開することができます。 ちょうどあなたのカスタムクラス

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 

    //cast the cell as your custom cell 
    if let myCell = cell as? MyCustomCell 
    { 
     myCell.player!.play() 
    } 

} 


func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) { 

    //cast the cell as your custom cell 
    if let myCell = cell as? MyCustomCell 
    { 
     myCell.player!.pause() 
    } 

} 
+0

ええ、私は一時停止できますが、それを一時停止するか、プレーヤーをゼロにする必要があります。セルがビデオ以外のものに使用できること、そしてセルがたくさんあることを考えると、 – Tometoyou

+0

@Tometoyou私はあなたが意味するものを参照してください。私はパフォーマンスの観点から答えを更新しました。 – ahbou

関連する問題