缩略图到“收藏夹”视图单元格

时间:2018-10-29 19:56:22

标签: ios swift uipageviewcontroller

我正在尝试创建底部水平滚动缩略图视图,类似于iOS Photos应用程序中的视图。我创建了一个ThumbnailView文件,其中定义了thumbnailCollectionViewcollectionViewThumbnailView的实例)作为子视图添加到我的MainPageViewController中。在DetailViewModel中,我有一个PHAsset数组。我需要帮助,以将UIImage传递到协议方法cellForItemAt indexPath内的集合视图的每个单元格。我是iOS开发的新手,只是停留在这一点上。

代码:

我的ThumbnailView:

import UIKit
import Photos

class ThumbnailView: UIView, UICollectionViewDelegate, UICollectionViewDataSource {


var assets: [PHAsset] = []



private let imageDownloader = ImageDownloader(targetSize: CGSize(width: 100, height: 100 ))

//var selectedImage: UIImage?

lazy var thumbnailCollectionView: UICollectionView = {

    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .horizontal

    let view =  UICollectionView(frame: CGRect.zero, collectionViewLayout: layout)
    view.translatesAutoresizingMaskIntoConstraints = false

    view.delegate = self
    view.dataSource = self
    view.register(ThumbnailCollectionViewCell.self, forCellWithReuseIdentifier: "Cell")
    view.backgroundColor = UIColor.red

    return view
}()

override init(frame: CGRect) {
    super.init(frame: frame)

    self.backgroundColor = UIColor.yellow



    addSubview(thumbnailCollectionView)


    thumbnailCollectionView.leftAnchor.constraint(equalTo: leftAnchor).isActive = true
    thumbnailCollectionView.rightAnchor.constraint(equalTo: rightAnchor).isActive = true
    thumbnailCollectionView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
    thumbnailCollectionView.heightAnchor.constraint(equalToConstant: 100).isActive = true


}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}


func numberOfSections(in collectionView: UICollectionView) -> Int {

    // #warning Incomplete implementation, return the number of sections
    return 1
}


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


}



func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath as IndexPath) as! ThumbnailCollectionViewCell
    cell.backgroundColor = UIColor.orange


    return cell
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

}

func configureCell(indexPath: IndexPath, image: UIImage) {
    guard let cell = thumbnailCollectionView.cellForItem(at: indexPath) as? ThumbnailCollectionViewCell else {
        return
    }
    cell.configure(image: image)
}


func getAssetThumbnail(asset: PHAsset) -> UIImage {
    let manager = PHImageManager.default()
    let option = PHImageRequestOptions()
    var thumbnail = UIImage()
    option.isSynchronous = true
    manager.requestImage(for: asset, targetSize: CGSize(width: 100, height: 100), contentMode: .aspectFit, options: option, resultHandler: {(result, info)->Void in
        thumbnail = result!
    })
    return thumbnail
}




}

我的MainPageViewController

class MainPageViewController: UIPageViewController {

var mainImageIndex: Int?

var pageViewModels: [DetailPageViewModel]!

var viewModel: DetailViewModel!

var collectionAssets: [PHAsset] = []



    // Collection View
    lazy var collectionView: ThumbnailView = {
        let view = ThumbnailView()
        view.assets = self.collectionAssets

        view.translatesAutoresizingMaskIntoConstraints = false
        return view
    }()





 override func viewDidLoad() {

super.viewDidLoad()


dataSource = self
delegate = self

view.backgroundColor = UIColor.green
setViewControllers([pageViewControllersArray[mainImageIndex ?? 0]], direction: .forward, animated: true, completion: nil)

self.view.addSubview(collectionView)
setupCollectioViewAutoLayout()





}

//MARK: - Create VC

lazy  var pageViewControllersArray: [PageViewController] = {
    return pageViewModels.map {
        return PageViewController(viewModel: $0)
    }



}()

func setupCollectioViewAutoLayout(){

    collectionView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
    collectionView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
    collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    collectionView.heightAnchor.constraint(equalToConstant: 100).isActive = true
}


   func viewWillAppear() {
    super.viewWillAppear(true)

    }
}

extension MainPageViewController: UIPageViewControllerDelegate, UIPageViewControllerDataSource{



func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {


    guard let viewController = viewController as? PageViewController else {return nil}



    if let index = pageViewControllersArray.index(of: viewController){


        if index > 0{

            return pageViewControllersArray[index - 1]

        }

    }
    return  nil

}


func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {

    guard let viewController = viewController as? PageViewController else {return nil}


    if let index = pageViewControllersArray.index(of: viewController){

        if index < pageViewControllersArray.count - 1{

            return pageViewControllersArray[index + 1]
        }

    }
    return nil
}


func presentationIndex(for pageViewController: UIPageViewController) -> Int{ // The selected item reflected in the page indicator.
    return 0
}

}

我的DetailViewModel

final class DetailViewModel {

private let assets: [PHAsset]
let mainImageIndex: Int
private var zoomedImageDownloader: ImageDownloader?

init(assets: [PHAsset], mainImageIndex: Int) {
    self.assets = assets
    self.mainImageIndex = mainImageIndex
}

lazy var pageViewModels: [DetailPageViewModel] = {
    return assets.map { DetailPageViewModel(asset: $0) }
}()

lazy var thumbnailAssets: [PHAsset] = {
   return assets
}()





}

0 个答案:

没有答案
相关问题