私がやりたいことは、画像とビデオのセルを持つUICollectionViewControllerを持っていて、ビデオをタップするとフルスクリーンでビデオが再生されるようにしたいのです。私はすでに画像のためにこれを作っていますが、私はビデオのためにこれをどうやって行うのかについてはあまりよく分かりません。したがって、画像では、画像(セル)をタップし、画像は黒の背景ビューで画面の中央に移動します。同じことをビデオに組み込んでいきたいと思いますが、もちろんビデオも再生されます。セルからビデオをフルスクリーンで表示するSwift
私は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
})
}
}
}
私が提示したコードはあまり意味がないならば、私はあなたのすべてが、このようなものを知っていると確信して申し訳ありませんスーパー秘密ですので、カット&ペーストして表示するだけで十分です。もう一度私は謝罪します。 私は再生ボタンも持っていますので、コレクションビューに読み込まれたビデオがある場合、ビデオが再生されるように再生ボタンが表示され、再生ボタンがセル内で再生されますそれはあなたがほとんどのアプリケーションに見られるように、センターに行くことを望みます。
ありがとうございます!私は十分な情報を提供したと思いますか?
ありがとうございました!これは私が探しているようです!私は明日これを試して更新します。 – Jaqueline
ようこそ、私はこのコードを私のプロジェクトに追加しました。私を更新してください。 –
プロジェクト - >ビルドフェーズ--->バンドルリソースをコピーしてビデオファイルをここに追加してビデオファイルをコピーするのを忘れないでください。 –