ios - 在 performBatchUpdates 期间允许用户交互
问题描述
我有一个集合视图,我修改了它的项目大小,我通过调用它的performBatchUpdates
方法来应用更改。
这会导致使用漂亮的动画进行更改,事实是,它还禁用了与我的 collectionView 的所有用户交互,我希望仍然允许这样做。
我也尝试将调用包装在一个UIView.animate
带有选项的块中.allowUserInteraction
,但没有运气。
func collectionView(_ collectionView: UICollectionView, didUpdateFocusIn context: UICollectionViewFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {
workItem?.cancel()
workItem = DispatchWorkItem(block: {
UIView.animate(withDuration: 0.2, delay: 0, options: [.curveEaseOut, .allowUserInteraction], animations: {
self.collectionView.performBatchUpdates(nil, completion: nil)
}, completion: nil)
})
DispatchQueue.main.asyncAfter(wallDeadline: .now() + 0.5, execute: workItem!)
}
有没有办法克服这一点并允许在动画期间进行用户交互?
解决方案
如果 workItem 很重,您可以尝试将其移至后台线程。根据我的经验,在主线程上执行某些操作时更新/更改 UICollectionView 总是会冻结 UI。
你可以试试 :
DispatchQueue.global(qos: .background).async {
workItem!
}
推荐阅读
- swift - 用超类约束扩展
- javascript - 孩子是反应性的,但孩子的孩子不是反应性的 - vue
- python-3.x - Python3 - 'ValueError:没有足够的值来解包(预期 2,得到 0)'
- r - ncvar_get “无法为 netcdf4 子集分配大小向量”,无论多么小
- python - 从 pdf 中搜索多个单词
- python-3.x - 使用 Python 从原始文本中提取名称
- java - 模拟 DJI Mobile SDK 保持
- sql - 如果指定了 Order By 子句,标识值是否一致?
- r - 在R中使用并行包时如何设置种子
- sql - 如何使用满足特定条件的总和来创建输出