gpt4 book ai didi

ios - 重新排序 CollectionView 单元格 iOS 11

转载 作者:搜寻专家 更新时间:2023-10-31 19:36:37 30 4
gpt4 key购买 nike

我知道 iOS 11 为 collectionview 带来了新的拖放功能,但我在使用它时遇到了一个完全不同的问题。所以我想我会尝试使用 IOS 9 中引入的旧方法 ( see this link )。我的问题是,在 iOS 11 上,当你的手指被移开时结束动画只有在两个单元格切换时才会表现得很奇怪。您可以在这个 clip 中看到问题.

几天来我一直在努力解决这个问题,但没有成功。它在 iOS 10 上运行良好,但在 iOS 11 上运行不佳。我们将不胜感激。

额外信息:我正在使用带有长按手势的 Collection View 来启动重新排序手势,如第一个链接所示。但是,使用 uicollectionviewcontroller 时仍然出现问题

这是长按手势的代码:

func handleLongGesture(gesture: UILongPressGestureRecognizer) {

switch(gesture.state) {

case .began:
guard let selectedIndexPath = self.collectionView.indexPathForItem(at: gesture.location(in: self.collectionView)) else {
break
}
collectionView.beginInteractiveMovementForItem(at: selectedIndexPath)
case .changed:
collectionView.updateInteractiveMovementTargetPosition(gesture.location(in: gesture.view!))
case .ended:
// this part misbehaves on ios 11 when two cells are swapped
collectionView.performBatchUpdates({
self.collectionView.endInteractiveMovement()
)}
default:
collectionView.cancelInteractiveMovement()
}
}

最佳答案

首先,您不需要将 collectionView.endInteractiveMovement() 放在 performBatchUpdates block 中。但是尽管如此,这个问题也一直困扰着我。 iOS 10 和 11 与此 endInteractiveMovement 之间的差异没有多大意义。

对于我的问题,我在我的 collectionView 上方放置了一个假的快照单元格,并在我运行手势状态更改和 updateInteractiveMovementTargetPosition 时隐藏下面的内容。一旦手势状态已.ended,我从 super View 中删除假单元格,然后执行endInteractiveMovement。但是现在使用 iOS 11,我在上一个答案的评论中遇到了与@prolfe 相同的问题。由于有问题的单元格意外重新加载,我得到了这个奇怪的闪光。

我最终采用的解决方案是延迟移除假细胞,这样它就可以“掩盖”闪光。

我的 pushBackView 方法将伪造的单元格动画化回放置位置,然后移除伪造的单元格。然后我执行延迟:

case .ended:

fakeCellView?.pushBackView { [weak self] in // 'suppress' cell animation

DispatchQueue.main.asyncAfter(deadline: .seconds(0.01), execute: {
self?.fakeCellView?.removeFromSuperview()
})

self?.collectionView?.endInteractiveMovement()
}

希望这对您有所帮助!

enter image description here

关于ios - 重新排序 CollectionView 单元格 iOS 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46017959/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com