gpt4 book ai didi

ios - UISegmentedControl 带有两个 UICollectionViews 来显示图像。多线程

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:27:08 24 4
gpt4 key购买 nike

所以我的目标是创建这样的东西:

enter image description here

enter image description here

我的问题是当我在段之间切换时,我想显示一个 UIActivityViewIndicator 旋转,因为它需要一些时间来加载图像(存储在本地所以理论上这应该更快......)。但是线程似乎在切换到新单元格的图像之前又回来了。

我做错了什么?

这是我的代码:

- (void)reloadCollection {

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
[_myCollection reloadData];
[_myCollection layoutIfNeeded];

dispatch_async(dispatch_get_main_queue(), ^{

_spinnerView.hidden = YES;

});
});

- (IBAction)segmentedControlSwitched:(id)sender{

_spinnerView.hidden = NO;

[self reloadCollection];

-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 1;

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


if ([_mySegmentedControl selectedSegmentIndex] == 0){
return [_photosTaken count];
}else
return [_photosTagged count];

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
UICollectionViewCell *cell;
UIImageView *imageView;

if ([_mySegmentedControl selectedSegmentIndex] == 0){
cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
imageView = [[UIImageView alloc] initWithImage:[_photosTaken objectAtIndex:indexPath.row]];

}
else
{
cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell1" forIndexPath:indexPath];
imageView = [[UIImageView alloc] initWithImage:[_photosTagged objectAtIndex:indexPath.row]];

}

imageView.frame = cell.frame;
[cell setBackgroundView:imageView];
return cell;

谢谢,若昂·加西亚。

最佳答案

您不能在后台线程上调用 UIKit 操作,除非文档明确说明可以。

在任何情况下,您的问题都不是简单地通过将东西扔到后台线程中来解决的问题。

您自己说,由于某种原因加载线程花费的时间太长。为什么不使用仪器中的时间分析器来找出原因呢?

您可能会发现问题在于您每次都在创建一个全新的 ImageView 并将其添加为单元格背景 View 。

创建、添加和删除 View 是一项昂贵的操作,不应在滚动时执行。您的自定义 Collection View 单元格应该已经有一个 ImageView ,您已将其添加到 Storyboard或自定义 init 方法中,并为其创建了一个导出或属性。不使用子类单元格是非常不寻常的,因为基本单元格在内容 View 中没有任何内容。

填充单元格时,只需将 ImageView 的图像属性设置为您存储的图像。这应该足够快,您不需要微调器。

从您的评论来看,您似乎也有这些问题:

  • 您使用的图片太大了。要在列表中显示,您必须使用适当大小的缩略图
  • 您正在模拟器上进行性能测试。这与设备上的实际应用程序性能无关。内存情况完全不同,事物的速度可以更快或更慢,具体取决于操作(通常,基于 CPU 的速度更快,但基于 GPU 的速度更慢)。

关于ios - UISegmentedControl 带有两个 UICollectionViews 来显示图像。多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26597788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com