Как отобразить фотолибра в виде UICollectionView или в виде сетки активов в Swift - PullRequest
1 голос
/ 17 июня 2019

Какой лучший способ создать нечто похожее на страницу загрузки в Твиттере, где отображается около 10 фотографий из библиотеки фотографий, чтобы пользователь мог выбрать один?

Ниже приведено изображение того, что я пытаюсь сделать.

Вот что я сделал до сих пор. Тем не менее, он не показывает, когда я запускаю приложение.

import photos

class UploadPostVC: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
    var imageArray = [UIImage]()

    @IBOutlet weak var showPhotosCollectionView: UICollectionView!

    override func viewDidLoad() {
        super.viewDidLoad()

        grabPhotos()
    }

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

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)

        let imageView = cell.viewWithTag(1) as! UIImageView

        print("wassup")
        imageView.image = self.imageArray[indexPath.row]

        return cell
    }

    func grabPhotos(){
        let imgManager = PHImageManager.default()

        let requestOptions = PHImageRequestOptions()
        requestOptions.isSynchronous = true
        requestOptions.deliveryMode = .highQualityFormat

        let fetchOptions = PHFetchOptions()
        fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
        let fetchResult : PHFetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions)
            if fetchResult.count > 0 {
                for i in 0..<fetchResult.count{

                    //Used for fetch Image//
                    imgManager.requestImage(for: fetchResult.object(at: i) as PHAsset , targetSize: CGSize(width: 100, height: 100), contentMode: .aspectFill, options: requestOptions, resultHandler: {
                        image, error in
                        let image = image! as UIImage
                        self.imageArray.append(image)
                        self.showPhotosCollectionView.reloadData()
                        print ("appended images")
                    })

                    self.showPhotosCollectionView.reloadData()

                }

            }
            else {
                  print("you got no phots")
                self.showPhotosCollectionView.reloadData()
        }
    } 

what I'm trying to do

1 Ответ

1 голос
/ 17 июня 2019

Вы должны установить delegate и dataSource представления коллекции. Просто измените функцию viewDidLoad:

override func viewDidLoad() {
    super.viewDidLoad()
    self.showPhotosCollectionView.delegate = self
    self.showPhotosCollectionView.dataSource = self
    grabPhotos()
}
...