2014-02-14 75 views
0

我找了一些建议。我正在构建一个照片编辑应用程序,需要在屏幕上水平显示缩略图(20+)。每个缩略图都是通过将一个小图像通过GPUImage然后使用线程显示在屏幕上来创建的。延迟加载的UIScrollView或UITableView的

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!而非。有谁能提供一些建议吗?

感谢

回答

2

根据你想要如何显示你的数据(即图片+标题+有关图片的细节或者只是在简单的,普通的imageView中),因为这个懒加载是事实,它确实更容易去UITableView或UICollectionView这两种类别的默认,内置和难以避免的行为。

它们都是可滚动的,并显示可以通过StoryBoard设计的单元格(UITableViewCell或UICollectionViewCell)(例如,在那里添加一个imageView,下面有一个标签......)并使用委托模式懒惰地询问控制器在单元即将到达屏幕时显示。

让我们假设你希望使用的CollectionView(当时哟可以显示网格状布局的几个ImageView的),但一会的tableView工作,99%的方式相同。 你要做的第一件事是的CollectionView添加到您的故事板,并添加一个的CollectionView里面UICollectionViewCell,并与自己的设计定制(即里面添加一个ImageView的)。你的CollectionView可以包含多个单元设计(只是一个ImageView的正常图像,用“新”丝带为新增加的图像的ImageView的,用“最后编辑”文本框用于编辑图像的ImageView的),但你应该在给予(仍storyBoard)每个设计的唯一标识符,在每个设计中为每个单元的UI组件设置一个标签值。

一旦布局完成后,申报场景控制器作为数据源为您的CollectionView和实施方法

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

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

第一个必须返回总顺应了UICollectionViewDataSource协议要显示的图像数量(以便底层滚动视图可以缩放其内容大小),第二个是让您返回单元格以显示给定的indexPath,它基本上是一个包装类,它包含ns项目索引和部分索引。 当单元格即将出现在屏幕上时,第二种方法被称为lazily,因此在此方法中,您可以根据indexPath.item值(作为要显示的图像的索引)检索缩略图图像, StoryBoard通过将- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;发送到collectionView来定义设计。通过将-(UIVIew *)viewWithTag:(NSInteger)tag消息发送到上一个方法返回的单元格,然后将它们的文本/图像属性设置为要显示给用户的内容,通过标记值获取单元的设计元素。

这是一个相当合理的方法你的答案,我会很乐意帮助你更技术上,如果证明是必要的。

干杯,

+0

很好的答案。 +1用于收集视图方法。 – Cyrille

0

使用泰伯维这是该更加灵活。您可以轻松加载并轻松进行选择。同时,我建议UICollectionView这一点。这对此也更有用。

scrollview问题:在滚动之前,您需要一次添加并加载所有图像,这会让您的应用程序变慢。根据您的要求,Frame calculation也有点复杂。