Ios 全屏显示单元格中的视频

Ios 全屏显示单元格中的视频,ios,swift,firebase,video,Ios,Swift,Firebase,Video,所以我想做的是我有一个UICollectionViewController,里面有图像和视频单元,我想要它,这样当你点击视频时,它会全屏播放视频。我已经为图像制作了这个,但是我不太确定如何为视频制作这个?因此,对于这些图像,你点击图像(单元格),图像就会以黑色背景视图显示在屏幕中央。我想把同样的东西,但与视频,当然,视频将播放等 我正在从Firebase获取视频 关于图像的代码: import UIKit import Firebase import MobileCoreServices

所以我想做的是我有一个UICollectionViewController,里面有图像和视频单元,我想要它,这样当你点击视频时,它会全屏播放视频。我已经为图像制作了这个,但是我不太确定如何为视频制作这个?因此,对于这些图像,你点击图像(单元格),图像就会以黑色背景视图显示在屏幕中央。我想把同样的东西,但与视频,当然,视频将播放等

我正在从Firebase获取视频

关于图像的代码:

import UIKit
 import Firebase
 import MobileCoreServices
 import AVFoundation

   class ImagesAndVideosController: UICollectionViewController,  UICollectionViewDelegateFlowLayout {

lazy var messageImageView: UIImageView = {
    let imageView = UIImageView()
    imageView.translatesAutoresizingMaskIntoConstraints = false
    imageView.layer.cornerRadius = 16
    imageView.layer.masksToBounds = true
    imageView.contentMode = .scaleAspectFill
    imageView.isUserInteractionEnabled = true
    imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleZoomTap)))

    return imageView
}()



 func handleZoomTap(_ tapGesture: UITapGestureRecognizer) {
    if message?.videoUrl != nil {

        return
    }

    if let imageView = tapGesture.view as? UIImageView {

            self.chatLogController?.performZoomInForStartingImageView(imageView)
    }
}

 var startingFrame: CGRect?
 var blackBackgroundView: UIView?
 var startingImageView: UIImageView?

 func performZoomInForStartingImageView(_ startingImageView: UIImageView) {

    self.startingImageView = startingImageView
    self.startingImageView?.isHidden = true

    startingFrame = startingImageView.superview?.convert(startingImageView.frame, to: nil)

    let zoomingImageView = UIImageView(frame: startingFrame!)
    zoomingImageView.backgroundColor = UIColor.red
    zoomingImageView.image = startingImageView.image
    zoomingImageView.isUserInteractionEnabled = true
    zoomingImageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleZoomOut)))

    if let keyWindow = UIApplication.shared.keyWindow {
        blackBackgroundView = UIView(frame: keyWindow.frame)
        blackBackgroundView?.backgroundColor = UIColor.black
        blackBackgroundView?.alpha = 0
        keyWindow.addSubview(blackBackgroundView!)

        keyWindow.addSubview(zoomingImageView)

        UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {

            self.blackBackgroundView?.alpha = 1
            self.inputContainerView.alpha = 0

            // math?
            // h2 / w1 = h1 / w1
            // h2 = h1 / w1 * w1
            let height = self.startingFrame!.height / self.startingFrame!.width * keyWindow.frame.width

            zoomingImageView.frame = CGRect(x: 0, y: 0, width: keyWindow.frame.width, height: height)

            zoomingImageView.center = keyWindow.center

        }, completion: { (completed) in
            //                    do nothing
        })

    }
}
 func handleZoomOut(_ tapGesture: UITapGestureRecognizer) {
    if let zoomOutImageView = tapGesture.view {
        //need to animate back out to controller
        zoomOutImageView.layer.cornerRadius = 16
        zoomOutImageView.clipsToBounds = true

        UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {

            zoomOutImageView.frame = self.startingFrame!
            self.blackBackgroundView?.alpha = 0
            self.inputContainerView.alpha = 1

        }, completion: { (completed) in
            zoomOutImageView.removeFromSuperview()
            self.startingImageView?.isHidden = false
        })
    }
}
}

如果我提供的代码没有多大意义,我很抱歉,我相信你们都知道这些东西是超级机密的,所以我不得不剪切粘贴足够的内容来显示,但不是全部。所以我再次道歉。 我还有一个播放按钮,所以当有一个视频加载到集合视图时,它会知道,并在其顶部放置一个播放按钮,以便视频可以播放,但是视频在单元内部播放,这就是为什么我希望它转到中心(就像大多数应用程序中看到的那样)


非常感谢你!!我希望我提供了足够的信息

我创建了这个播放视频的方法

    func playVideo() {
    guard let path = Bundle.main.path(forResource: "Video", ofType:"mp4") else {
        debugPrint("video.m4v not found")
        return
    }
    let player = AVPlayer(url: URL(fileURLWithPath: path))
    let playerController = AVPlayerViewController()
    playerController.player = player
    present(playerController, animated: true) {
        player.play()
    }
}

非常感谢你!看起来这就是我要找的!我将在明天试用并更新。欢迎,我已经在我的项目中添加了相同的代码,效果很好。请务必更新我。请不要忘记通过单击“项目-->构建阶段-->复制捆绑资源”复制您的视频文件,并将您的视频添加到此处。抱歉,回复太晚。我的第一个问题是,当我将present(playerController,动画:true){player.play()}放在上面时,它会说“使用未解析的标识符present”,我不知道为什么?而且我对构建阶段的事情感到困惑。我正在从firebase导入所有视频(和图像),它们不是本地视频,所以我必须这样做吗?非常感谢你!