首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ALAssetsLibrary,NSMutable数组和UITableview懒散滚动?

ALAssetsLibrary,NSMutable数组和UITableview懒散滚动?
EN

Stack Overflow用户
提问于 2012-02-14 05:19:49
回答 1查看 1K关注 0票数 2

我正在尝试实现一个基于ALAssetsLibrary的应用程序,从ios4中的照片库获取所有图像和视频。我将ALAsset存储到NSMutableArray(资产)中,然后在tableview单元格中显示所有的视频/照片。现在的问题是视图不能顺利滚动,我如何克服这个问题呢?

在具有这种类型值的NSMutable数组(资产)的索引中。

代码语言:javascript
复制
    "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部分与此资产数组分离。那只是这部分

代码语言:javascript
复制
assets-library://asset/asset.MOV?id=1000000505&ext=MOV

assets-library://asset/asset.PNG?id=1000000402&ext=PNG

是否需要在此应用程序中实现HjCache?还有其他办法来解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2012-12-07 04:45:57

如果您考虑以下3件事情,则在加载照片库图像时不会有任何延迟。

1.只在您的ALAsset URL NSMutableArray 中存储而不是 ALAsset

如果您使用的是UIImagePicker,您可以通过didFinishPickingMediaWithInfo委托获取URL

NSURL* mediaUrl = [info valueForKey:UIImagePickerControllerMediaURL]

aspectRatioThumbnail 2.使用ALAsset 而不是 fullResolutionImage

代码语言:javascript
复制
 CGImageRef iref = [myasset aspectRatioThumbnail]; 
 UIImage *loadedImage = [UIImage imageWithCGImage:iref];

3.在主线程.中处理与UI相关的内容

因为ALAssetsLibrary块将在单独的线程中执行。因此,在主线程中执行与UI相关的操作时,性能将得到提高。

要做到这一点,请使用

dispatch_sync(dispatch_get_main_queue()performSelectorOnMainThread

示例:

代码语言:javascript
复制
 dispatch_sync(dispatch_get_main_queue(), ^{

    cell.imageView.image = [UIImage imageWithCGImage:iref];    

 });//end block

最终代码应该如下所示:

代码语言:javascript
复制
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];

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9272102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档