簡體   English   中英

如何顯示照片庫中剛選擇的圖像?

[英]How to display images that in photo gallery that were just selected?

目標:用戶從她的相冊中選擇照片>點擊“完成”>顯示照片。

問題: “完成”后,照片不會立即顯示。 如果我再次打開選擇器並點擊“取消”,它們就會顯示出來。

當我使用UIImagePickerController時,這種方法效果很好(照片立即顯示出來),但是后來我切換到ELCImagePickerController進行了多次選擇,因此它不再起作用。

預感

  • 顯示所有圖像的CollectionView是否未重新加載? 但是我選擇了圖像(在completionHandler上collectionView.reloadData()后嘗試調用collectionView.reloadData() )。 這沒有用。

如果有幫助,這是我的ViewController.swift elcImagePickerController函數

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)
            }
        )
    })

我花了一段時間來復制您的情況和錯誤,但是我設法解決了,找到了解決方案!

你是用呼喚正確的道路上collectionView.reloadData()completionHandler ,但它需要更多的工作。


1)

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

您必須更新此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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM