DTMediasViewController 1.0.2

DTMediasViewController 1.0.2

TestsTested
LangLanguage SwiftSwift
License MIT
ReleasedLast Release Jun 2017
SwiftSwift Version 3.0
SPMSupports SPM

Maintained by Dan Jiang, Dan Jiang.



DTMediasViewController

Introduction

Demo

Browse photo, gif and video. Swipe left or right to see next or previous. Pinch to zoom in or out photo and gif. Video with control button to play or pause. Single tap should dismiss view controller.

Installation

Requirement

iOS 8.4+

Usage

Import

import DTMediasViewController

Load Mixed Local and Remote Medias

class ViewController: UIViewController {
  
  fileprivate let session = URLSession.shared
  fileprivate let medias = [DTMedia(data: try! Data(contentsOf: Bundle.main.url(forResource: "animate", withExtension: "gif")!)),
                        DTMedia(image: UIImage(named: "apple-keynote")!),
                        DTMedia(type: .video, url: URL(string: "https://ob0h37q93.qnssl.com/waiting.mp4?avvod/m3u8/pipeline/da/s/960x640/vb/1000k")!),
                        DTMedia(type: .gif, url: URL(string: "http://www.uimaker.com/uploads/allimg/141226/101RIF6-3.gif?imageView2/2/q/90")!),
                        DTMedia(type: .photo, url: URL(string: "http://img5.imgtn.bdimg.com/it/u=1879925847,3681677304&fm=11&gp=0.jpg")!)]
  fileprivate let placeholderImage = UIImage(named: "placeholder_large")
  
  override func viewDidLoad() {
    super.viewDidLoad()
  }
  
  @IBAction func showMedias(_ sender: AnyObject) {
    let mediasViewController = DTMediasViewController(medias: medias, photoPlaceholderImage: placeholderImage, gifPlaceholderImage: placeholderImage, currentPage: 0)
    mediasViewController.handler = self
    showDetailViewController(mediasViewController, sender: nil)
  }
  
}

// MARK - DTPhotosViewControllerPhotosURLHandler

extension ViewController: DTMediasViewControllerPhotoURLHandler {
  
    func mediasViewController(_ mediasViewController: DTMediasViewController, photo: DTMedia, viewController: UIViewController) {
    let task = session.dataTask(with: photo.url!) { (data, response, error) in
      if let error = error {
        print(error)
      } else if let data = data {
        DispatchQueue.main.async {
          var newPhoto = photo
          if newPhoto.type == .gif {
            newPhoto.data = data
            mediasViewController.setPhoto(newPhoto, forViewController: viewController)
          } else if let image = UIImage(data: data) {
            newPhoto.image = image
            mediasViewController.setPhoto(newPhoto, forViewController: viewController)
          }
        }
      }
    }
    task.resume()
  }
  
}