0

目標:用戶從她的照片庫中選擇照片>點擊「完成」>照片顯示。如何顯示剛剛選擇的照片庫中的圖像?

問題:「完成」後照片不會立即顯示。如果我再次打開拾取器並點擊「取消」,它們會顯示出來。

當我使用UIImagePickerController時,這工作正常(照片顯示立即),但後來我切換到ELCImagePickerController多選,它不再起作用。

預感

  • 的CollectionView顯示所有圖像沒有被重新加載?但在圖像被選中後(在完成處理程序上),我嘗試調用collectionView.reloadData()。這沒有奏效。

如果有幫助,這是我的elcImagePickerController功能從我ViewController.swift

func elcImagePickerController(picker: ELCImagePickerController!, didFinishPickingMediaWithInfo info: [AnyObject]!) { 

    println("inside elcImagePickerController") 

    self.dismissViewControllerAnimated(true, completion: nil) 

    if (info.count == 0) { 
     return 
    } 

    var pickedImages = NSMutableArray() 
    for any in info { 
     let dict = any as! NSMutableDictionary 
     let image = dict.objectForKey(UIImagePickerControllerOriginalImage) as! UIImage 
     pickedImages.addObject(image) 
    } 

    let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT 

    dispatch_async(dispatch_get_global_queue(priority, 0), { 


     PHPhotoLibrary.sharedPhotoLibrary().performChanges(
      { 

       for img in pickedImages{ 

        // Request creating an asset from the image 
        // create multiple creationRequestForAssetFromImage 

        let createAssetRequest = PHAssetChangeRequest.creationRequestForAssetFromImage(img as! UIImage) // add to main gallery 

        ///Request editing the album 
        let albumChangeRequest = PHAssetCollectionChangeRequest(forAssetCollection: self.assetCollection, assets: self.photosAsset) 

        // Get a placeholder for the new asset and add it to the album editing request 
        let assetPlaceholder = createAssetRequest.placeholderForCreatedAsset 

        albumChangeRequest.addAssets([assetPlaceholder]) 

       } 


      }, completionHandler: {(success, error) in 
       NSLog("Adding Image to Library -> %@", (success ? "Success" : "Error")) 
       picker.dismissViewControllerAnimated(true, completion: nil) 
      } 
     ) 
    }) 
+0

哎...阿斯我已經使用ELCImagePickerController到我的應用程序來選擇多個圖像。在ELCImagePickerController中選擇圖像顯示在Imageview中的滾動視圖,但我想在集合視圖中顯示那些選定的圖像,而不是在目標c中的滾動視圖。請給我代碼。我嘗試了很多。 –

回答

1

我花了一段時間來複制您的情況和錯誤,但我管理,我發現了一個解決方案!

您在completionHandler中撥打電話collectionView.reloadData()的正確路徑,但它需要更多的工作。


1)

在我的測試場景中,我用了一個名爲PHFetchResult作爲photosAssetUICollectionView的主要來源(我假設你有一個類似的設置)。

你必須更新此PHFetchResult,以反映最近的變化,在我的情況下,我用下面一行:

self.photosAsset = PHAsset.fetchAssetsInAssetCollection(self.assetCollection, options: nil) 

2)

這是正確的,你必須重新加載視圖與collectionView.reloadData(),但completionHandler內的代碼不在主線程/ UI線程上運行。所以,你必須把它像下面這樣:

dispatch_async(dispatch_get_main_queue(), {self.collectionView?.reloadData()}) 

綜上所述:

在最後,你completionHandler應類似於這樣:

completionHandler: {(success, error) in 
    NSLog("Adding Image to Library -> %@", (success ? "Success" : "Error")) 
    self.photosAsset = PHAsset.fetchAssetsInAssetCollection(self.assetCollection, options: nil) 
    dispatch_async(dispatch_get_main_queue(), {self.collectionView?.reloadData()}) 
    picker.dismissViewControllerAnimated(true, completion: nil) 
} 
+0

你真是驚豔。我現在非常喜歡你。 – Aspen

+0

hey Kumuluzz ..我已經使用ELCImagePickerController到我的應用程序來選擇多個圖像。在ELCImagePickerController中選擇圖像顯示在Imageview中的滾動視圖,但我想在集合視圖中顯示那些選定的圖像,而不是在目標c中的滾動視圖。請給我代碼。我嘗試了很多。 –

+0

Hi @bhavin。我很樂意幫助你,但是我們不應該這樣做,因爲這個問題已經完成了,而且會成爲題外話。相反,你應該創建一個新的問題,針對你的問題。你說你已經嘗試了很多,所以記得複製/粘貼該代碼到你的問題。請隨時在評論中將我的新問題鏈接到此處。 – Kumuluzz

相關問題