我有一个集合视图,可以修改它的大小,然后通过调用它的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!
}
关于ios - 在PerformBatchUpdates期间允许用户交互,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59513115/