2017-06-11 5 views
0

問題が発生しました。私は2つのテーブルで構成されるアプリを作りたいと思う。最初のテーブルにはラベルとビューがあり、2番目のテーブルにはボタンとビューがあります。そして、私は両方のテーブルのすべてのラベルのインターネットから同じビデオファイルを再生したい。しかし、何かが間違っている...私のミスはどこですか?たぶん誰かが私を助けることができます。AVFoundationとUITableView

私はテーブルに異なるタグを与えました。テーブルのカスタムセルごとに作られています。

@IBOutlet weak var firstTable: UITableView! 
@IBOutlet weak var secondTable: UITableView! 
let firstCell = "firstCell" 
let secondCell = "secondCell" 
let avPlayer = AVPlayer() 
var avPlayerLayer: AVPlayerLayer! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    firstTable.delegate = self 
    firstTable.dataSource = self 

    secondTable.delegate = self 
    secondTable.dataSource = self 

    avPlayerLayer = AVPlayerLayer(player: avPlayer) 
    view.layer.insertSublayer(avPlayerLayer, at: 0) 

    let url = NSURL(string: "http://jplayer.org/video/m4v/Big_Buck_Bunny_Trailer.m4v") 
    let playerItem = AVPlayerItem(url: url! as URL) 
    avPlayer.replaceCurrentItem(with: playerItem) 
    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.viewWillAppear(_:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: avPlayer.currentItem) 
} 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    let seconds : Int64 = 0 
    let preferredTimeScale : Int32 = 1 
    let seekTime : CMTime = CMTimeMake(seconds, preferredTimeScale) 
    avPlayer.seek(to: seekTime) 
    avPlayer.isMuted = true 
    avPlayer.play() 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if (tableView.tag == 1) { 
     return 30 
    } else if (tableView.tag == 2) { 
     return 20 
    } else { 
     return 0 
    } 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    if (tableView.tag == 1) { 

     let cell = tableView.dequeueReusableCell(withIdentifier: firstCell, for: indexPath) as! FirstTableViewCell 
     cell.numCell.text = String(indexPath.row) 
     viewVideo(viewer: cell.videoCell) 
     return cell 
    } else { 
     let cell = tableView.dequeueReusableCell(withIdentifier: secondCell, for: indexPath) as! SecondTableViewCell 
     cell.buttonCell.setTitle(String(indexPath.row), for: .normal) 
     cell.buttonCell.tag = indexPath.row 
     cell.buttonCell.addTarget(self, action: #selector(showAlertForRow(sender :)), for: .touchUpInside) 
     viewVideo(viewer: cell.videoSecondCell) 
     return cell 
    } 

} 

func viewVideo(viewer: UIView) { 
    super.viewWillLayoutSubviews() 
    viewer.layer.addSublayer(avPlayerLayer) 
    avPlayerLayer.frame.size = CGSize(width: viewer.frame.width, height: viewer.frame.height) 
} 

@IBAction func showAlertForRow(sender: UIButton) { 
    let alert = UIAlertController(title:"Test work",message:"Cell at row \(sender.tag) was tapped!",preferredStyle: .alert) 
    alert.addAction(UIAlertAction(title: "Okay", style: UIAlertActionStyle.default, handler: nil)) 
    self.present(alert, animated: true, completion: nil) 
} 

これは私の問題のあるgifですか? enter image description here

答えて

0

私は風の答えです。 AvPlayerLayerはセルの内側にある必要があります。しかし、私のように、すべての細胞に1人の選手がいました。

関連する問題