Wim*_*tra 11 iphone cocoa-touch ios
我得到了一个UITableView充满未知数量的行.每行包含(例如3个)图像,应用程序从Web服务收集此信息.
为UITableView我实现无限滚动.每当表几乎达到当前行数的末尾时,我就会启动对webservice的调用,以获取接下来的50行数据.我在这个scrollViewDidScroll方法中执行此操作UITableView.
- (void) scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat actualPosition = scrollView.contentOffset.y;
float bottomOffset = 450;
if([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)
bottomOffset = 1000;
CGFloat contentHeight = scrollView.contentSize.height - bottomOffset;
if (actualPosition >= contentHeight && !_loading && !_cantLoadMore)
{
self.loading = YES;
_currentPage++;
NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:[NSNumber numberWithInt:_currentPage] forKey:@"page"];
[dict setObject:[_category objectForKey:@"ID"] forKey:@"category"];
[self performSelectorInBackground:@selector(getWallpapersInBackground:) withObject:dict];
}
}
Run Code Online (Sandbox Code Playgroud)
行中的图像UITableView是延迟加载的.每当一行可见时,图像将被加载到一个单独的线程中,并且一旦完全下载图像就会更新行.我用于延迟加载的原则与Apple在其文档中建议的相同.图像也被添加到本地NSDictionary,因此当行滚出屏幕并返回时(我重新创建行),我可以获取它.
由于单个视图中的图片数量可以达到2000 - 3000,因此我还会将图像缓存到磁盘并清除图像,这些图像距离NSDictionaryX行以外的距离.当用户向下滚动并再次向上滚动时,会发生以下情况:
UIImage添加以便NSDictionary更快地缓存需要触及的图像.NSDictionary由于内存问题(导致内存不足错误的UIImage对象太多),从行中删除了15行或更远的可见行的图像NSDictionary.当UITableView几乎到达结尾时,会发生以下情况:
numberOfItemsInSection方法.reloadData调用A 以确保UITableView填充额外的新行.所以,我遇到的问题是当我从webservice添加新记录时.当我调用reloadDataon时,UITableView一些图像再次从磁盘加载,并且在滚动时发生一些hickup.
我正在为此寻找解决方案.我尝试使用insertItemsAtIndexPaths新行的数量,将它们添加到UITableView,但这使得我的延迟加载方法已经下载了图像(因为不知何时所有单元格都是在那时创建的,即使它们不可见,检查单元格是否为在创建过程中可见会产生意外结果,图像无法加载,单元格看起来很奇怪等等.
所以,我基本上是在找的是一个无限滚动的UITableView,从网络/磁盘延迟加载图像并作为照片应用作为平滑的解决方案.由于图像都是在不同的线程中加载的,我不明白为什么滚动不像婴儿的皮肤那么光滑.
Jef*_*mas 15
我不确定我是否完全了解你的问题,但是在遇到类似的问题时我会做一些事情.
我用-tableView:cellForRowAtIndexPath:我的提示从网上加载更多数据.当我indexPath.row + 10 >= self.data.count加载更多数据时,我选了一个数字(在我的情况下为10).
-tableView:cellForRowAtIndexPath:无论如何我还需要打电话.-scrollViewDidScroll:.我继承UIImageView了一个类,它会异步加载我调用的图像URLImageView.
-tableView:cellForRowAtIndexPath:,我为URLImageView实例分配了一个URL .我有一张包含数百张(但不是数千张)图像的桌面视图.我一次只在屏幕上有2或3个表格单元格.
-refreshData:它像冠军一样工作.URLImageView至淡化了图像.这是一个非常好的效果.我希望有所帮助.