UICollectionView didSelectItemAtIndexPath 需要很长时间才能触发(2-3 秒)

Posted

技术标签:

【中文标题】UICollectionView didSelectItemAtIndexPath 需要很长时间才能触发(2-3 秒)【英文标题】:UICollectionView didSelectItemAtIndexPath takes a long time to fire (2-3 seconds) 【发布时间】:2016-06-24 16:01:22 【问题描述】:

我在作为 UIView 的子类中嵌入了一个 UICollectionView。 该 UIView 是从 NIB 加载的,并且包含有 IBOutlet 的 UICollectionView。

UICollectionView 委托和数据源在视图的 awakeFromNib 中设置为此 UIView。

当用户在 UICollectionView 中按下 Cell 时,在 iPhone 4s 上调用以下方法需要 2-3 秒:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath

在速度更快的手机上,它的速度更快、响应更快(但您可以看出它仍然没有应有的响应速度)。在 4s 上应该也很快。 4s 正在运行 9.3(我预计时间为 20-40 MS,而不是更长)。

目前,从用户体验的角度来看,它的表现非常缓慢。

那么可能是 UI 线程加载过多而无法让 didSelect 方法呼吸? (注意:其他 UI 动作很快)。

【问题讨论】:

你到底在didSelect做什么? 现在:没有任何目的。我正在做 NSLog(@"TEST")。 触摸可能被其他手势识别器延迟。 【参考方案1】:

问题是: 在我的单元格类中,我有一个 UIImageView 并且我正在设置一个大图像(尺寸超过 1300 x 1300),并将其设置为模板(因此加载了 2 个图像),然后对其应用 Tint 颜色。我在 cellForRow 中执行此操作...尽管在 didSelect 上没有调用该代码,但图像本身的绝对大小及其缩放导致在选择单元格时 didSelect 速度变慢。

我将其替换为 128 x 128 的图像,并且现在相同的代码可以快速运行。

【讨论】:

我有一个 1200 x 1200,变成了 128 x 128,你这个人 Alex。 UICollectionView 现在很快。

以上是关于UICollectionView didSelectItemAtIndexPath 需要很长时间才能触发(2-3 秒)的主要内容,如果未能解决你的问题,请参考以下文章

使用 didSelectRowAtIndexPath 进行转场

Swift UITableView didSelectRowAtIndexPath 错误

折叠UICollectionView

-[UICollectionView _endItemAnimations] 中的 UICollectionView 断言失败

如何滚动另一个 UICollectionView 下方的 UICollectionView?

UICollectionView 单元内部已加载,但 UICollectionView 未显示