我在滚动视图(照片库)中显示多个图像时遇到问题。 我从文档目录中提取了图片。当我显示超过100张图片应用程序崩溃时。所以我想将图像存储在缓存中。
我想显示前15个图像,然后从缓存中显示其他图像。当我从缓存中滚动scrollview
前15时,将显示,然后显示下一个。
要求是在scrollview
不在collectionView
或其他组件中显示图片。
files
是从文档目录中提取的array
个图像路径。
我已获取所有图片路径并存储在files array
。
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);
}
答案 0 :(得分:1)
缓存并不能解决你的记忆问题。 (如果有的话,使用额外的内存缓存只会给应用程序带来更多的内存压力。)出于性能原因使用缓存,而不是减少内存使用。
问题在于您尝试将图片视图预先加载到滚动视图中。我建议延迟加载图像视图及其相关图像。而不是分15次(或其他)批量执行,我建议您使用UIScrollViewDelegate
方法动态执行此操作:
为滚动视图设置delegate
;
实施scrollViewDidScroll
,它将:
从滚动视图中删除任何不可见的图像视图(或至少在附近)
添加已滚动到视图中的所有图片视图并设置其image
属性
如果由于性能原因要与NSCache
结合使用以进行缓存,可以根据需要进行缓存,但我建议首先关注主要的手动滚动视图委托实现。