Я создаю приложение, похожее на Instagram, в котором я хочу показать изображение обложки для видео, а затем при нажатии кнопки воспроизведения (на изображении) воспроизводится видео. Я могу создавать и показывать записи по желанию, однако, когда я нажимаю кнопку воспроизведения, воспроизводится видео (я слышу звук), но оно не отображается.
Я пытаюсь отобразить видео в случае 1: ниже
Я обрабатываю функцию кнопки воспроизведения вне tableView в функции @bjc.
Я думаю, что моя проблема заключается в установке playerLayer.frame в нужную ячейку / представление, но я не совсем уверен. Буду признателен за любую помощь. Вот мой код Спасибо!
ОБНОВЛЕНО с РЕШЕНИЕМ:
Благодаря смещению в правильном направлении я узнал, что для доступа к ячейке табличного представления мне нужно было использовать свойство sender. В этом случае sender.superview дал мне представление, к которому я пытался получить доступ.
Код обновлен ниже с исправлением. Спасибо за помощь!
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let post = posts[indexPath.section]
switch indexPath.row {
case 0:
let cell = tableView.dequeueReusableCell(withIdentifier: "PostHeaderCell") as! PostHeaderCell
cell.userProfileImage.sd_setImage(with: post.userPhotoURL, placeholderImage: #imageLiteral(resourceName: "NinjaIcon"), options: [], completed: nil)
cell.usernameLabel.text = post.username
return cell
case 1:
let cell = tableView.dequeueReusableCell(withIdentifier: "PostImageCell") as! PostImageCell
cell.postImage.sd_setImage(with: post.photoURL, placeholderImage: #imageLiteral(resourceName: "photo-7"), options: [], completed: nil)
cell.playButton.isHidden = false
cell.playButton.addTarget(self, action: #selector(handlePlay), for: .touchUpInside)
cell.playButton.tag = indexPath.section
return cell
case 2:
let cell = tableView.dequeueReusableCell(withIdentifier: "PostActionCell") as! PostActionCell
cell.delegate = self
configureCell(cell, with: post)
return cell
default:
fatalError("Error: unexpected indexPath")
}
}
@objc func handlePlay(sender: UIButton!) {
let cell = sender.superview
let tag = sender.tag
let post = posts[tag]
let text = post.postText
let videoURLString = post.videoURL
let player = AVPlayer(url: videoURLString!)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = cell.postImage.bounds
cell.postImage.layer.addSublayer(playerLayer)
player.play()
// test to make sure the right video is playing
print("for text: ",text)
print("Attempting to Play: ",videoURLString )
}