2016-11-23 6 views
0

ライブラリから複数の画像を選択して、UICollectionViewで表示しようとしています。画像を取り込むときには問題なく動作しますが、画像はUICollectionViewに表示されません。私はもう一度イメージを選択しようとし、以前のイメージが表示されます。現在選択されているものはありません。ここでCollectionViewはDKImagePickerControllerでリロードしません

はコードです:ここでは

imagePicker.didSelectAssets = {[unowned self] (assets: [DKAsset]) in 
    print("Selected!") 

    for asset in assets { 
     asset.fetchOriginalImageWithCompleteBlock({ (image, info) in 
      guard let imageData = UIImageJPEGRepresentation(image!, 0) else { 
       print("There is no image bro..!") 
       return 
      } 
      let thumbnails = UIImage(data: imageData) 
      self.imageArray.append(thumbnails!) 
      print(image!) 
     }) 
    } 

    self.collectionView.reloadData() 
} 

は私が問題を解決したか疑問に思う人のためcellForItemAt:

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

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "selectedImage", for: indexPath) as! SelectedImageCell 
    cell.image = imageArray[indexPath.item] 
    return cell 

} 

です。ここにコードがあります。

let group = DispatchGroup() 

     for asset in assets { 
      group.enter() 
      asset.fetchOriginalImageWithCompleteBlock({ (image, info) in 

       guard let imageData = UIImageJPEGRepresentation(image!, 0) else { 
        print("There is no image bro..!") 
        return 
       } 
       let thumbnails = UIImage(data: imageData) 
       self.imageArray.append(thumbnails!) 
       print(image!) 
       group.leave() 
      }) 
     } 

     group.notify(queue: .main, execute: { 
      print("finish..") 
      self.collectionView.reloadData() 
     }) 
+0

コレクションのリロード後にforループ処理が終了したときに試してみます。 –

+0

'cellForItemAt indexPath'メソッドを表示してください。 –

+0

@ YogendraGiraseはすでに試しました。 – user3057414

答えて

1

asset.fetchOriginalImageWithCompleteBlockは、非同期ブロックであるので

imagePicker.didSelectAssets = {[unowned self] (assets: [DKAsset]) in 
     print("Selected!") 

     for asset in assets { 

      asset.fetchOriginalImageWithCompleteBlock({ (image, info) in 

       guard let imageData = UIImageJPEGRepresentation(image!, 0) else { 
        print("There is no image bro..!") 
        return 
       } 
       let thumbnails = UIImage(data: imageData) 
       self.imageArray.append(thumbnails!) 
       print(image!) 
       self.collectionView.reloadData() 
      }) 
     } 
    } 

、これを試してみてください。

+0

あなたのコードは、ループプロセスのループ回数と間違ったプロセスである複数の時間のコレクションリロードに応じて、複数の時間リロードコレクションです。 –

+0

@ YogendraGirase、右のポイント - これは、ソリューションが動作するかどうかを知るための回避策です。@ user3057414は、単一のセルをリロードする必要に応じて 'reloadData()'メソッドを更新できます。 –

+0

ああ、大丈夫です。私は完全なブロックを忘れていた。ありがとう、一人の男。 – user3057414

関連する問題