在performBatchUpdates中允许用户交互

问题描述 投票:0回答:1

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

有什么方法可以超越动画,并在动画过程中允许用户交互?

ios swift uicollectionview uiviewanimation tvos
1个回答
0
投票

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

您可以尝试:

   DispatchQueue.global(qos: .background).async {
     workItem! 
    }
© www.soinside.com 2019 - 2024. All rights reserved.