目标:用户从她的相册中选择照片>点击“完成”>显示照片。
问题:“完成”后,照片不会立即显示。如果我再次打开选择器并点击“取消”,它们就会显示出来。
当我使用UIImagePickerController时,这种方法效果很好(照片立即显示出来),但是后来我切换到ELCImagePickerController进行了多次选择,因此它不再起作用。
腰腿
显示所有图像的CollectionView是否未重新加载?但是我选择了图像(在complementHandler上)后尝试调用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)
}
)
})
最佳答案
我花了一段时间来复制您的情况和错误,但是我设法解决了!
在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)
}
关于ios - 如何显示照片库中刚选择的图像?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30686496/