ios - 一旦 UICollectionViewCell 变得可见,如何在它上调用 UI 函数
问题描述
我有一个可爱的 UICollectionView 住在 ViewController 中,有一个 UICollectionViewCell 的自定义类。每个单元格中都有一个 ImageView,它使用库来运行动画 gif。CollectionView 是全宽的,因此一次只能看到一个单元格。
我需要 gif 不出现,并且在包含单元格完全可见之前不开始运行。我知道从 gif 库调用什么函数来启动/停止动画。我不知道在哪里/何时调用该函数。
我只能找到 CollectionView 中的东西,所以我从 ViewController 调用它们。在 ViewController 的 scrollViewDidEndScrollingAnimation 中调用我的动画函数之类的事情会得到以下错误:
在从主线程访问引擎后,此应用程序正在从后台线程修改自动布局引擎。这可能导致引擎损坏和奇怪的崩溃。
我在 CollectionViewCell 中设置了 prepareForReuse,它暂时“隐藏”了 gif 图像视图(alpha 0),所以当我滚动到一个重用的单元格时,至少没有另一个 gif 的闪烁。但这并没有考虑在单元格完全可见后让 gif 开始动画。
非常感谢任何帮助:)
编辑:好的,所以这个问题没有多大意义。原因如下:我误读了一条错误消息,因此除了尝试在我自己的代码中修复问题外,还试图解决我正在使用的库中存在的问题。解决方案是...停止使用该 gif 库,因为它有问题,并切换到支持更多我需要的其他库。
解决方案
我会尝试在 UICollectionView 上启用分页,然后在延迟后在 UICollectionViewDelegate 的方法触发动画上启用:
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
// (cell as? CustomCell).animate()
}
}
推荐阅读
- java - 两个类对 JDBC Driver 的看法不同
- excel - Excel VBA - 如何发送包含特定单元格值特定文本的电子邮件?
- json - 如何通过集合
在.net mvc中从视图到控制器 - ios - UiPickerView 在模拟器中运行时移动到原点
- java - 替换与 arrayList 中的键匹配的字符串的多个部分
- javascript - 尝试用“let”替换“var”时未捕获的 TypeError
- javascript - 如何编写嵌套的 v-for 循环以显示所有元素?
- c++ - 恒定时间码
- php - 仅知道位置和结构时替换子字符串
- python - 如何使用变量对数组进行切片和迭代?