Ios 延迟加载UIScrollView或UITableView

Ios 延迟加载UIScrollView或UITableView,ios,objective-c,uitableview,uiscrollview,lazy-loading,Ios,Objective C,Uitableview,Uiscrollview,Lazy Loading,我在寻求一些建议。我正在构建一个照片编辑应用程序,需要在屏幕上水平显示缩略图(20+)。每个缩略图都是通过将一个小图像通过GPUImage创建的,然后使用线程将其显示在屏幕上 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ UIImage *imageWithEffect = [self editImage:[obj objectAtIndex

我在寻求一些建议。我正在构建一个照片编辑应用程序,需要在屏幕上水平显示缩略图(20+)。每个缩略图都是通过将一个小图像通过
GPUImage
创建的,然后使用线程将其显示在屏幕上

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{

                UIImage *imageWithEffect = [self editImage:[obj objectAtIndex:0] ImageToEdit:thumbnailImage];

                    dispatch_async(dispatch_get_main_queue(), ^{

                         [imageViewWithEffect setImage:imageWithEffect];
                         [activityIndicator removeFromSuperview];

                    });

            });
目前我正在使用
UIScrollView
显示图像,但我发现处理所有图像需要一段时间。我想做的是在用户将
UIImageView
滑入视图时“延迟加载”图像。问题是我不确定如何找到当前正在查看的图像

有些人提到,使用
UITableView
s可能更容易。有人能给点建议吗


感谢使用更灵活的Tableview。您可以轻松加载并轻松进行选择。此外,我还建议UICollectionView。这也更有用


scrollview的问题:在滚动之前,您需要一次添加并加载所有图像,这会使您的应用程序速度减慢<代码>帧计算根据您的要求也有点复杂。

根据您希望显示数据的方式(即图片+标题+图片的详细信息,或仅在简单、普通的图像视图中),考虑到延迟加载是默认情况,使用UITableView或UICollectionView确实更容易,这两个类的内置和难以避免的行为

它们都是可滚动的,并显示可通过故事板设计的单元格(UITableViewCell或UICollectionViewCell)(即:在此处添加图像视图,在下方添加标签…),并使用委派模式惰性地询问控制器当单元格即将到达屏幕时显示什么

假设您希望使用collectionView(您可以在网格状布局中显示多个imageView),但tableView的工作方式与此相同。 您必须做的第一件事是将collectionView添加到故事板中,并在collectionView内部添加UICollectionViewCell,并使用您自己的设计对其进行自定义(即在内部添加imageView)。collectionView可以包含多个单元格设计(对于普通图像,只有一个imageView;对于新添加的图像,有一个“新建”功能区的imageView;对于已编辑的图像,有一个“上次编辑人”文本字段的imageView),尽管您应该为每个设计(仍在情节提要中)提供唯一标识符,在每个设计中,为每个单元格的UI组件设置一个标记值

布局完成后,将场景控制器声明为collectionView的数据源,并通过实现这些方法符合UICollectionViewDataSource协议

-(NSInteger)collectionView:(UICollectionView*)collectionView numberofitems节:(NSInteger)节

-(UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath

第一个函数必须返回要显示的图像总数(以便底层滚动视图可以缩放其内容大小),第二个函数用于返回要在给定IndexXPath处显示的单元格,XPath基本上是一个包含项索引和节索引的包装类。 第二种方法是在单元格即将出现在屏幕上时延迟调用的,因此在这种方法中,您可以根据indexPath.item值(作为要显示的图像的索引)检索缩略图图像,通过发送
-(UICollectionViewCell*)collectionView:(UICollectionView*)获取具有脚本定义设计的单元格collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath到collectionView。通过将
-(UIVIew*)viewWithTag:(NSInteger)tag
消息发送到上一个方法返回的单元格,根据其标记值获取单元格的设计元素,然后将其文本/图像属性设置为要向用户显示的内容

这是你回答问题的一个比较原始的方法,如果有必要,我很乐意在技术上帮助你


干杯,

回答得好+1用于集合视图方法。