如何在照片库中显示刚刚选中的图片?

时间:2015-06-06 18:58:25

标签: ios swift uicollectionview uiimagepickercontroller elcimagepickercontroller

目标:用户从照片库中选择照片>点击"完成" >照片出现了。

问题:在完成"完成"后,照片不会立即显示。如果我再次打开选择器并点击“#34;取消”,它们会显示出来。"

当我使用UIImagePickerController时,这工作正常(照片立即出现),但后来我切换到ELCImagePickerController进行多项选择,它不再有效。

预感

  • 显示所有图像的CollectionView没有重新加载?但是我在选择图像后尝试调用collectionView.reloadData()(在completionHandler上)。这没用。

如果有帮助,这是我的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)
            }
        )
    })

1 个答案:

答案 0 :(得分:1)

我花了一些时间来复制你的场景和错误,但我设法找到了解决方案!

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