我有一个使用 UIImagePickerController 的应用程序从相机和照片库中检索图片 . 在图像选择器委托中,我只想保存所选图像的NSURL( UIImagePickerControllerReferenceURL )以节省内存 . 当用户稍后需要查看图像时,我直接从照片库加载PHCachingImageManager .
现在 - 这整个过程非常适合用户从库中选择的图片,但不适用于直接由相机拍摄的图片(因为没有URL) . 我目前正在尝试使用 PHAsset 保存图片,但我不知道如何获取保存图片的NSURL .
这就是我一直在做的事情:
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject])
{
picker.dismissViewControllerAnimated(true, completion: nil)
let pickedImage = info[UIImagePickerControllerOriginalImage] as! UIImage
if picker.sourceType == .Camera
{
// When taking a picture with the camera, store it in the user roll
PHPhotoLibrary.sharedPhotoLibrary().performChanges(
{ () -> Void in
// save the image
PHAssetCreationRequest.creationRequestForAssetFromImage(pickedImage)
// TODO how to get the asset url
}, completionHandler:
{ (finished, error) -> Void in
if (finished)
{
}
}
)
}
else
{
let pickedImageUrl: NSURL? = info[UIImagePickerControllerReferenceURL] as? NSURL
currentImageUrl = pickedImageUrl
currentImage = pickedImage
toggleImageInfoView(true)
toggleMapState(true)
}
}
任何想法如何获取保存图片的网址?
最好的,乔治
2 回答
更新:似乎我找到了这个问题的答案 .
第1步:我将图像保存到相机
这是异步完成的,因此请确保在操作完成时设置选择器 .
第2步:操作完成后,我执行以下操作:
我使用PHAsset获取相机胶卷中的最后一张图像并保存图像的本地标识符 . 这不是URL,而是不会更改的唯一标识符 . 这样,您就可以完美地访问保存的图像 .
希望这有助于他人!
我同意你的看法 .
但是,如果Image的Exif具有较早的日期 .
fetchResult.firstObject不是您刚刚保存的那个 .
也许你可以修改
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)
到key: "modificationDate"
顺便说一句,我发现了另一种方式:
可以获得新的PHAsset .