ios - 延迟加载 UIScrollView 或 UITableView

标签 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:0] ImageToEdit:thumbnailImage];

                    dispatch_async(dispatch_get_main_queue(), ^{

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

                    });

            });

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

有人提到使用 UITableView 可能更容易。谁能提供一些建议?

谢谢

最佳答案

根据您想要显示数据的方式(即图片 + 标题 + 关于图片的详细信息或仅在简单、普通的 imageView 中),考虑到默认的延迟加载这一事实,选择 UITableView 或 UICollectionView 确实更容易,这两个类的内置且难以避免的行为。

它们都是可滚动的并显示可以通过 Storyboard设计的单元格(UITableViewCell 或 UICollectionViewCell)(即:在其中添加一个 ImageView ,在下面添加一个标签...)并使用委托(delegate)模式懒惰地询问 Controller 要做什么在单元格即将到达屏幕时显示。

假设您希望使用 collectionView(然后您可以在类似网格的布局中显示多个 imageView),但 tableView 的工作方式 99% 相同。 您要做的第一件事是将 collectionView 添加到 StoryBoard 并在 collectionView 中添加一个 UICollectionViewCell 并使用您自己的设计对其进行自定义(即在其中添加一个 imageView)。你的 collectionView 可以包含多个单元格设计(只是一个用于普通图像的 imageView,一个用于新添加图像的带有"new"功能区的 imageView,一个用于编辑图像的带有“最后编辑”文本字段的 imageView),尽管你应该给出(仍在storyBoard)每个设计的唯一标识符,在每个设计中为每个单元格的 UI 组件设置一个标签值。

布局完成后,将场景 Controller 声明为 collectionView 的数据源,并通过实现方法来符合 UICollectionViewDataSource 协议(protocol)

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section;

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

第一个必须返回要显示的图像总数(以便底层 ScrollView 可以缩放其内容大小),第二个用于返回要在给定 indexPath 处显示的单元格基本上是一个包含项目索引和部分索引的包装类。 第二种方法是在cell即将出现在屏幕上时懒惰调用的,所以在这个方法中你可以根据indexPath.item值(即要显示的图像的索引)检索你的缩略图,得到一个带有a的单元格StoryBoard 通过发送 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath; 到 collectionView 来定义设计。通过将 -(UIVIew *)viewWithTag:(NSInteger)tag 消息发送到上一个方法返回的单元格,然后将它们的文本/图像属性设置为你想展示给用户。

这是您回答的一种相当理论化的方法,如果事实证明有必要,我很乐意在技术上为您提供更多帮助。

干杯,

关于ios - 延迟加载 UIScrollView 或 UITableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21778700/

相关文章:

iphone - 为什么此 Objective-C 代码会引发 malloc 错误?

ios - 帮助循环、存储和使用 CGPoints

用于 Windows 的 Objective-C

ios - 使用核心数据获取零项会导致错误

ios - 单击时如何避免单元格分隔符消失

ios - UISearchDisplayController 不会触发 didSelectRowAtIndexPath

ios - 音量 slider 没有效果

objective-c - 专家的 iOS 3d

ios - Apple Watch Kit 无法获取图像

ios - Swift 2.3 会与 iOS 10 兼容吗?