从相机胶卷中获取所有图像并在滚动视图中显示它?

时间:2015-12-31 05:31:51

标签: ios image memory memory-management alassetslibrary

目前我正在使用ALasset库来获取图像,但是当相机卷中的图像数量很大时,我会收到内存警告问题。

e.g assetsd died

这是我从相机胶卷中获取图像的代码

[self.assetsGroup enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:(NSMakeRange(0, self.assetsGroup.numberOfAssets - 1))] options:NSEnumerationReverse usingBlock:^(ALAsset result, NSUInteger index, BOOL stop)
             {
                 if (result)
                 {
                     UIImage *imageThumbnail;

                     imageThumbnail = [ImageHelper scaleAndRotateImage:[UIImage imageWithCGImage:[[result defaultRepresentation] fullScreenImage]] maxSize:500];

                     if(imageThumbnail)
                     {
                         //Do your code here….
                     }
             }];

我如何解决内存警告和资产死亡问题。 我也知道有滚动视图的应用程序包含所有相机胶卷图像但滚动显示不是网格形式吗?所以我可以参考它。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我认为不是使用滚动视图而是使用带有row = self.assetsGroup.numberOfAssets - 1的集合视图,而是在集合视图中使用单元格编写代码,如下所示

[self.assetsGroup enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:(NSMakeRange(0, indexPath.row))] options:NSEnumerationReverse usingBlock:^(ALAsset result, NSUInteger index, BOOL stop)
         {
             if (result)
             {
                 UIImage *imageThumbnail;

                 imageThumbnail = [ImageHelper scaleAndRotateImage:[UIImage imageWithCGImage:[[result defaultRepresentation] fullScreenImage]] maxSize:500];

                 if(imageThumbnail)
                 {
                     //Do your code here….
                 }
         }];

还有一个更多的imageThumbnail大小是几kb所以你可以存储它(在本地目录或coredata中使用nsdata)并且在使用enumerateAssetsAtIndexes检查图像之前已经存储了然后不要调用使用那个存储的图像