我在 ScrollView (照片库)中显示多个图像时遇到问题。 我已从文档目录中获取图像。当我显示超过 100 张图像时应用程序崩溃。所以我想将图像存储在缓存中。
我想显示前 15 张图像,然后显示缓存中的其他图像。当我滚动 scrollview
时,将显示缓存中的前 15 个,然后将显示下一个。
要求是在 scrollview
中显示图像,而不是在 collectionView
或其他组件中。
files
是从文档目录中获取的图像路径的 array
。
我已获取所有图像路径并存储在 files 数组
中。
int x=2,y=5;
for (int i = 0; i < files.count ; i++)
{
if(x<=308)
{
NSString *setPath=[NSString stringWithFormat"%@/%@",filePath,[files objectAtIndex:i]];
UIImage* imagePath = [UIImage imageWithContentsOfFile:setPath];
imgView=[[UIImageView alloc]initWithFrame:CGRectMake(x, y, 77, 75)];
imgView.image=imagePath;
x+=80;
}
else
{
x=2;
y+=77;
NSString *setPath=[NSString stringWithFormat"%@/%@",filePath,[files objectAtIndex:i]];
UIImage* imagePath = [UIImage imageWithContentsOfFile:setPath];
imgView=[[UIImageView alloc]initWithFrame:CGRectMake(x, y, 77, 75)];
imgView.image=imagePath;
x+=80;
}
[gallaryScrollView addSubview:imgView];
[self.view addSubview:gallaryScrollView];
gallaryScrollView.contentSize=CGSizeMake(320, y+120);
}
缓存不会解决您的内存问题。 (如果有的话,使用额外的内存缓存只会给应用程序带来更多的内存压力。)您使用缓存是出于性能原因,而不是为了减少内存使用量。
问题是您正试图将 ImageView 加载到前面的 ScrollView 中。我建议对 ImageView 及其相关图像进行延迟加载。而不是分批进行 15 个(或其他),我建议在您的 UIScrollViewDelegate
中动态进行。方法:
为 ScrollView 设置 delegate
;
实现 scrollViewDidScroll
这将:
从 ScrollView 中移除不可见(或至少不可见)的所有 ImageView
添加任何已滚动到 View 中的 ImageView 并设置其 image
属性
如果出于性能原因您想将此与 NSCache
结合使用以进行缓存,您可以根据需要这样做,但我建议首先关注主要的手动 ScrollView 委托(delegate)实现。
关于ios - 如何使用objective-c将图像存储在缓存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31701011/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |