首页 > 解决方案 > 在 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!)
}

有没有办法克服这一点并允许在动画期间进行用户交互?

标签: iosswiftuicollectionviewuiviewanimationtvos

解决方案


如果 workItem 很重,您可以尝试将其移至后台线程。根据我的经验,在主线程上执行某些操作时更新/更改 UICollectionView 总是会冻结 UI。

你可以试试 :

   DispatchQueue.global(qos: .background).async {
     workItem! 
    }

推荐阅读