how can we use tapGesture for playing videos in Tvos

337 views Asked by At

How can we use TapGesture in uicollectionview for playing videos in tvos. When we click the First Image, it should load the appropriate video for that when we tap and so on. How can I do this when the videos are in local ?

import Foundation
import UIKit
class FirstViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource, UICollectionViewDelegate, UIScrollViewDelegate {


let reuseIdentifierFeatured = "FeaturedCell"

var PosterImage : UIImage!
var ImagesDisplay = [String]()
var Try = [AppletvCollectionViewCell]()
var DefaultSize = CGSizeMake(267, 153)
var FocusSize = CGSizeMake(294, 268)

@IBOutlet weak var PosterBackGroundDisplay: UIImageView!

@IBOutlet weak var ScrollView: UIScrollView!

@IBOutlet weak var CollectionView1: UICollectionView!


override func viewDidLoad() {
    super.viewDidLoad()

    ImagesDisplay = ["Slow motion fire video Screenshot-1.jpg","Slow motion fire video Screenshot-2.jpg","Slow motion fire video Screenshot-3.jpg","Slow motion fire video Screenshot-4.jpg","Slow motion fire video Screenshot-5.jpg","Sun Timelapse Screenshot 1.jpg","Sun Timelapse Screenshot 2.jpg"]


    self.CollectionView1.delegate = self

    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
override func viewDidLayoutSubviews() {
    self.ScrollView!.contentSize = CGSizeMake(1920, 239)
}

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat {
    return 50
}

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat {
    return 50
}

func collectionView(collectionView: UICollectionView,
    layout collectionViewLayout: UICollectionViewLayout,
    insetForSectionAtIndex section: Int) -> UIEdgeInsets {
        return UIEdgeInsets(top: 0.0, left: 40.0, bottom: 0.0, right: 50.0)
}


func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
    return 1
}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
{
        return ImagesDisplay.count

}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    if  let cell : AppletvCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier(self.reuseIdentifierFeatured, forIndexPath: indexPath) as! AppletvCollectionViewCell {
        cell.Poster.image = UIImage(named: ImagesDisplay[indexPath.row])
        if cell.gestureRecognizers?.count == nil {
            let tap = UITapGestureRecognizer(target: self, action: "Tapped:")
            tap.allowedPressTypes = [NSNumber(integer: UIPressType.Select.rawValue)]
            cell.addGestureRecognizer(tap)
        }

        return cell

    }else {
        return AppletvCollectionViewCell()
    }



}
func Tapped(gesture : UIGestureRecognizer) {

        print("TappedSucess")
        let playerVC = PlayerViewController()
        playerVC.playVideo()
        [self.presentViewController(playerVC, animated: true, completion: nil)]

}

func collectionView(collectionView: UICollectionView, didUpdateFocusInContext context: UICollectionViewFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) {
    if let prev = context.previouslyFocusedView as? AppletvCollectionViewCell {
        UIView.animateWithDuration(0.1, animations: { () -> Void in
            prev.Poster.frame.size = self.DefaultSize

        })
    }

    if let next = context.nextFocusedView as? AppletvCollectionViewCell {
        UIView.animateWithDuration(0.1, animations: { () -> Void in
            next.Poster.frame.size = self.FocusSize
      self.PosterBackGroundDisplay.image = next.Poster.image
        })
    }

}
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    let playerVC = PlayerViewController()
    playerVC.playVideo()
    [self.presentViewController(playerVC, animated: true, completion: nil)]
}}
1

There are 1 answers

0
Meenakshi On BEST ANSWER

You can use the given method to load and play video.

func loadAndPlayVideo()
    {
        if let path = NSBundle.mainBundle().pathForResource("LocalFilename", ofType:"mp4")
        {
            let url = NSURL(fileURLWithPath:path)

            let playerItem = AVPlayerItem(URL: url)
            let player = AVPlayer(playerItem: playerItem);

            let playerVC = AVPlayerViewController()
            playerVC.player = player

            self.presentViewController(playerVC, animated: true, completion:nil)
            playerVC.player?.play()
        }
    }

If you want to play multiple video in the same player then use method "replaceCurrentItemWithPlayerItem".

Refer this link for more info- https://iosguy.com/2012/01/11/multiple-video-playback-on-ios/