2 // GalleryViewController.swift
5 // Created by Pawel Dabrowski on 17/09/2018.
6 // Copyright © 2018 Fundacja Nowoczesna Polska. All rights reserved.
11 class GalleryViewController: WLViewController {
13 @IBOutlet weak var closeButton: UIButton!
15 @IBOutlet weak var galleryCollectionView: UICollectionView!
17 private var flowLayout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
19 var dataSource: [String]!
21 var countDidLayoutSubviews = 0
22 var collectionViewInitialized = false
25 class func instance(photos: [String], startIndex: Int) -> GalleryViewController{
27 let controller = GalleryViewController.instance()
28 controller.dataSource = photos
29 controller.startIndex = startIndex
33 override func viewDidLoad() {
35 closeButton.tintColor = UIColor.white
36 closeButton.accessibilityLabel = "close".localized
37 closeButton.accessibilityHint = "close".localized
40 @IBAction func closeButtonAction(_ sender: Any) {
41 dismiss(animated: true, completion: nil)
44 override func viewDidLayoutSubviews() {
45 super.viewDidLayoutSubviews()
47 countDidLayoutSubviews += 1
49 if countDidLayoutSubviews == 2 && collectionViewInitialized == false{
50 setupCollectionViewIfNeeded()
54 private func setupCollectionViewIfNeeded(){
55 if collectionViewInitialized == false{
60 open override var preferredStatusBarStyle : UIStatusBarStyle {
64 private func setupCollectionView(){// -> UICollectionView {
66 collectionViewInitialized = true
68 flowLayout.scrollDirection = UICollectionViewScrollDirection.horizontal
69 flowLayout.minimumInteritemSpacing = 0
70 flowLayout.minimumLineSpacing = 0
72 flowLayout.itemSize = galleryCollectionView.bounds.size
74 galleryCollectionView.collectionViewLayout = flowLayout
76 galleryCollectionView.register(GalleryCell.self, forCellWithReuseIdentifier: "GalleryCell")
77 galleryCollectionView.dataSource = self
78 galleryCollectionView.delegate = self
79 galleryCollectionView.backgroundColor = UIColor.black
80 galleryCollectionView.isPagingEnabled = true
82 galleryCollectionView.contentSize = CGSize(width: 1000.0, height: 1.0)
84 galleryCollectionView.scrollToItem(
85 at: IndexPath(row: startIndex, section: 0),
91 extension GalleryViewController: UICollectionViewDataSource {
93 public func numberOfSections(in collectionView: UICollectionView) -> Int {
97 public func collectionView(_ imageCollectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
98 return dataSource.count
101 public func collectionView(_ imageCollectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
103 let cell = imageCollectionView.dequeueReusableCell(withReuseIdentifier: "GalleryCell", for: indexPath) as! GalleryCell
104 cell.url = dataSource[indexPath.row]
105 cell.setScrollEnabled(scrollEnabled: true)
110 // MARK: UICollectionViewDelegate Methods
111 extension GalleryViewController: UICollectionViewDelegate {
113 public func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
114 if let cell = cell as? GalleryCell {
115 cell.configureForNewImageUrl()
119 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
123 public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
125 // If the scroll animation ended, update the page control to reflect the current page we are on
126 // updatePageControl()