首页 > 解决方案 > 一旦 UICollectionViewCell 变得可见,如何在它上调用 UI 函数

问题描述

我有一个可爱的 UICollectionView 住在 ViewController 中,有一个 UICollectionViewCell 的自定义类。每个单元格中都有一个 ImageView,它使用库来运行动画 gif。CollectionView 是全宽的,因此一次只能看到一个单元格。

我需要 gif 不出现,并且在包含单元格完全可见之前不开始运行。我知道从 gif 库调用什么函数来启动/停止动画。我不知道在哪里/何时调用该函数。

我只能找到 CollectionView 中的东西,所以我从 ViewController 调用它们。在 ViewController 的 scrollViewDidEndScrollingAnimation 中调用我的动画函数之类的事情会得到以下错误:

在从主线程访问引擎后,此应用程序正在从后台线程修改自动布局引擎。这可能导致引擎损坏和奇怪的崩溃。

我在 CollectionViewCell 中设置了 prepareForReuse,它暂时“隐藏”了 gif 图像视图(alpha 0),所以当我滚动到一个重用的单元格时,至少没有另一个 gif 的闪烁。但这并没有考虑在单元格完全可见后让 gif 开始动画。

非常感谢任何帮助:)

编辑:好的,所以这个问题没有多大意义。原因如下:我误读了一条错误消息,因此除了尝试在我自己的代码中修复问题外,还试图解决我正在使用的库中存在的问题。解决方案是...停止使用该 gif 库,因为它有问题,并切换到支持更多我需要的其他库。

标签: iosswiftuicollectionview

解决方案


我会尝试在 UICollectionView 上启用分页,然后在延迟后在 UICollectionViewDelegate 的方法触发动画上启用:

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
     DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
            // (cell as? CustomCell).animate()
     }
}

推荐阅读