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

10-10 21:13