我有一个集合视图,可以修改它的项目大小,我可以通过调用它的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!
}