我正在尝试实现一个基于ALAssetsLibrary的应用程序,从ios4中的照片库获取所有图像和视频。我将ALAsset存储到NSMutableArray(资产)中,然后在tableview单元格中显示所有的视频/照片。现在的问题是视图不能顺利滚动,我如何克服这个问题呢?
在具有这种类型值的NSMutable数组(资产)的索引中。
"ALAsset - Type:Photo, URLs:{\n \"public.png\" = \"assets-library://asset/asset.PNG?id=1000000402&ext=PNG\";\n}",
(or)
"ALAsset - Type:Video, URLs:{\n \"com.apple.quicktime-movie\" = \"assets-library://asset/asset.MOV?id=1000000505&ext=MOV\";\n}",如何将url部分与此资产数组分离。那只是这部分
assets-library://asset/asset.MOV?id=1000000505&ext=MOV
assets-library://asset/asset.PNG?id=1000000402&ext=PNG是否需要在此应用程序中实现HjCache?还有其他办法来解决这个问题吗?
发布于 2012-12-07 04:45:57
如果您考虑以下3件事情,则在加载照片库图像时不会有任何延迟。
1.只在您的ALAsset URL NSMutableArray 中存储而不是 ALAsset
如果您使用的是UIImagePicker,您可以通过didFinishPickingMediaWithInfo委托获取URL
NSURL* mediaUrl = [info valueForKey:UIImagePickerControllerMediaURL];
aspectRatioThumbnail 2.使用ALAsset 而不是 fullResolutionImage
CGImageRef iref = [myasset aspectRatioThumbnail];
UIImage *loadedImage = [UIImage imageWithCGImage:iref];3.在主线程.中处理与UI相关的内容
因为ALAssetsLibrary块将在单独的线程中执行。因此,在主线程中执行与UI相关的操作时,性能将得到提高。
要做到这一点,请使用
dispatch_sync(dispatch_get_main_queue()或performSelectorOnMainThread
示例:
dispatch_sync(dispatch_get_main_queue(), ^{
cell.imageView.image = [UIImage imageWithCGImage:iref];
});//end block最终代码应该如下所示:
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset){
dispatch_sync(dispatch_get_main_queue(), ^{
GImageRef iref = [myasset aspectRatioThumbnail];
cell.imageView.image = [UIImage imageWithCGImage:iref];
});//end block
};
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror)
{
NSLog(@"Cant get image - %@",[myerror localizedDescription]);
};
ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init]; // USE ALAssetsLibrary as single-tone or global while using ARC
[assetslibrary assetForURL:asseturlFromYourArray
resultBlock:resultblock
failureBlock:failureblock];
}https://stackoverflow.com/questions/9272102
复制相似问题