我正在编写一个应用程序,此刻应该能够在专辑中专用于应用程序的图像。用户可以通过选择现有图像或使用相机拍摄新图像,从应用程序内部向文件夹添加图片。然而,这个功能非常慢,所以我想知道我是否正确这样做。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
使用所选的UIImage调用此方法:
- (void)addPictureAndUpdate:(UIImage *)image{
PHFetchOptions *albumFetchOptions = [PHFetchOptions new];
albumFetchOptions.predicate = [NSPredicate predicateWithFormat:@"%K like %@", @"title", self.albumName];
PHFetchResult *album = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:albumFetchOptions];
PHAssetCollection *assetCollection = album.firstObject;
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetChangeRequest *assetChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
PHAssetCollectionChangeRequest *assetCollectionChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection];
[assetCollectionChangeRequest addAssets:@[[assetChangeRequest placeholderForCreatedAsset]]];
} completionHandler:^(BOOL success, NSError *error) {
if (!success) {
NSLog(@"Error creating asset: %@", error);
} else {
//Add PHAsset to datasource
//Update view
}
}];
这(ChangeRequest的完成)很慢,比如20-30秒甚至更多。
出错了什么?我对iOS开发很新,显然对于新的Photos框架,我真的想学习如何做到这一点。
分离这两件事,显示图像并移动它会更聪明吗?目前,我正在为每个图像存储一个PHAsset,然后在需要时以所需的大小加载(用于在视图中显示的缩略图大小和在全屏显示时的原始大小)。总是只存储UIImage,然后改变它的大小会更聪明吗?这样,我就可以将请求添加到相册中,并立即显示它,因为我只是将UIImage添加到数据源。
我主要担心的是内存问题和扩展问题。为整个专辑存储UIImages会对应用程序造成太大的压力吗?并且,是否可以轻松调整UIImage的大小以进行显示?
谢谢