0

How to create array of multiple mp4 or mov files in swift. I was able to display the single video in uiwebview. I have pagecontrol to display some text but I need to display different videos same like texts. When the page control starts it should display next video. Here is the code for first view controller and page view controller.

import UIKit

class ViewController: UIViewController,UIPageViewControllerDataSource {

    //var pageImages:NSArray!
    var ouotes: NSArray!
    var video: NSArray!
    var pageViewController:UIPageViewController!

    @IBOutlet weak var GenerateNumbers: UIBarButtonItem!

    override func viewDidLoad() {
        super.viewDidLoad()

        video = ["2.mov", "1.mov", "4.mov"]
        ouotes =  ["sometext" ]

        // NSArray(objects:"ap", "bg", "gfb")
        /*  UIGraphicsBeginImageContext(self.view.frame.size)
        UIImage(named: "money")?.draw(in: self.view.bounds)

        let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!

        UIGraphicsEndImageContext()

        self.view.backgroundColor = UIColor(patternImage: image)*/

        self.pageViewController = self.storyboard?.instantiateViewController(withIdentifier: "MyPageViewController") as! UIPageViewController

        self.pageViewController.dataSource = self

        let initialContenViewController = self.pageTutorialAtIndex(0) as ContentHolder

        self.pageViewController.setViewControllers([initialContenViewController], direction: UIPageViewControllerNavigationDirection.forward, animated: true, completion: nil)

        self.pageViewController.view.frame = CGRect(x: 0, y: 100, width: self.view.frame.size.width, height: self.view.frame.size.height-100)

        self.addChildViewController(self.pageViewController)
        self.view.addSubview(self.pageViewController.view)
        self.pageViewController.didMove(toParentViewController: 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.
    }


    func pageTutorialAtIndex(_ index: Int) -> ContentHolder {

        let pageContentViewController = self.storyboard?.instantiateViewController(withIdentifier: "ContentHolder") as! ContentHolder

        pageContentViewController.imageFileName = ouotes[index] as! String
        pageContentViewController.videoFileName = video [index] as! String
        pageContentViewController.pageIndex = index

        return pageContentViewController

    }


    public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController?
    {
        let viewController = viewController as! ContentHolder
        var index = viewController.pageIndex as Int

        if (index == 0 || index == NSNotFound) {
            return nil
        }

        index -= 1

        return self.pageTutorialAtIndex(index)
    }

    public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController?
    {
        let viewController = viewController as! ContentHolder
        var index = viewController.pageIndex as Int

        if ((index == NSNotFound)) {
            return nil
        }

        index += 1

        if (index == ouotes.count) {
            return nil
        }

        if (index == video.count) {
            return nil
        }
        return self.pageTutorialAtIndex(index)
    }



    public func presentationCount(for pageViewController: UIPageViewController) -> Int {   
        return ouotes.count
    }

    public func presentationIndex(for pageViewController: UIPageViewController) -> Int{

        return 0
    }
}

And for the pagecontrol view where texts and videos should be displayed

import Foundation
import UIKit
import AVKit
import AVFoundation

class ContentHolder: UIViewController {

    var imageFileName: String!
    var videoFileName: String!
    var pageIndex:Int!

    @IBOutlet weak var EuroScrollView: UIScrollView!
    @IBOutlet weak var VideoView: UIWebView!

    @IBOutlet weak var myLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

       // let fileURL = NSURL (fileURLWithPath: "/Users/nafu/Desktop/2.mov")

        VideoView.loadHTMLString("<iframe width = \"\(self.VideoView.frame.width) \" height =\"\(self.VideoView.frame.height)\" src = \"\(videoFileName)\"> </iframe>", baseURL: nil)

       myLabel.text = imageFileName
       myLabel.numberOfLines = 0
       myLabel.lineBreakMode = NSLineBreakMode.byWordWrapping
       myLabel.font = UIFont(name:"HelveticaNeue-Bold", size: 15.0)

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

Thanks in advance.

Brakesoft
  • 1
  • 3
  • What have you tried already? please provide as much detail as you can, some code, better explanation will get better answer – Scriptable Jun 14 '17 at 14:29
  • now I have edited my question – Brakesoft Jun 14 '17 at 14:48
  • What are the video URL's or where are the videos stored? – Scriptable Jun 14 '17 at 15:07
  • Videos are .mov files which are stored locally in computer and I have imported them to my xcode project. – Brakesoft Jun 14 '17 at 15:22
  • Have you tried these other answers? https://stackoverflow.com/questions/7063276/how-to-load-local-html-file-into-uiwebview and https://stackoverflow.com/questions/24551251/play-local-video-file-in-uiwebview ? You can load a video if it is part of the app bundle. Make sure in your build rules that the videos are copied to device too – Scriptable Jun 14 '17 at 15:33
  • Yes I tried and did not work and Videos are in app bundle and copied to device. – Brakesoft Jun 15 '17 at 03:21

0 Answers0