ALAssetsLibrary,NSMutable Array和UITableview惰性滚动?
问题描述:
我想实现一个基于ALAssetsLibrary的应用程序,该应用程序从ios4中的照片库中获取所有图像和视频。我将ALAsset存储到NSMutableArray(资产)中,然后将所有视频/照片thumnail显示在tableview单元格中。 现在问题是uitableview不滚动顺畅,我怎么能过来这个问题?ALAssetsLibrary,NSMutable Array和UITableview惰性滚动?
在具有这种类型值的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? 任何其他方式来解决这个问题?
答
F你考虑以下三样东西,你不会有任何延迟,同时loading图片库的图像
1只存储ALAsset URL
到您的NSMutableArray
而不是ALAsset
如果您正在使用UIImagePicker,你可以通过didFinishPickingMediaWithInfo代理得到它的网址
NSURL* mediaUrl = [info valueForKey:UIImagePickerControllerMediaURL]
;
2.使用ALAsset aspectRatioThumbnail
而不是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];
}
你必须在这里使用lazyloding概念 – 2012-02-14 05:26:44
是的,问题是UITableview不能平滑滚动。 – 2012-02-14 05:31:25
NSURL * stUrl =(NSURL *)[[result defaultRepresentation] url] //结果是ALAsset实例,我们只得到了ALAsset的url部分 – 2012-02-14 11:49:15