2017-08-08 16 views
2

私がやりたいことは、画像とビデオのセルを持つ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 
     }) 
    } 
} 

}

私が提示したコードはあまり意味がないならば、私はあなたのすべてが、このようなものを知っていると確信して申し訳ありませんスーパー秘密ですので、カット&ペーストして表示するだけで十分です。もう一度私は謝罪します。 私は再生ボタンも持っていますので、コレクションビューに読み込まれたビデオがある場合、ビデオが再生されるように再生ボタンが表示され、再生ボタンがセル内で再生されますそれはあなたがほとんどのアプリケーションに見られるように、センターに行くことを望みます。

ありがとうございます!私は十分な情報を提供したと思いますか?

答えて

2

私はビデオを再生するためのこのメソッドを作成しました。

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() 
    } 
} 
+0

ありがとうございました!これは私が探しているようです!私は明日これを試して更新します。 – Jaqueline

+0

ようこそ、私はこのコードを私のプロジェクトに追加しました。私を更新してください。 –

+0

プロジェクト - >ビルドフェーズ--->バンドルリソースをコピーしてビデオファイルをここに追加してビデオファイルをコピーするのを忘れないでください。 –

関連する問題