gpt4 book ai didi

Swift:切换 View 后使用 UILongPressGestureRecognizer 时应用程序崩溃

转载 作者:行者123 更新时间:2023-11-30 11:54:42 24 4
gpt4 key购买 nike

在我看来,我包含了两个不同的 UIGestureRecognizer,UILongPressGestureRecognizer 和 UITapGestureRecognizer。一个用于重新排列图像的 UICollectionView,另一个用于简单的点击,导致所选图像的详细 View 。

一开始一切正常,但是当我在呈现详细 ImageView 后返回到 View 时,每当我尝试拖动图像时,应用程序都会崩溃。点击功能每次都有效,但在开始拖动图像后立即发生崩溃。

override func viewDidLoad() {
super.viewDidLoad()

self.longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(self.handleLongGesture(gesture:)))
self.longPressGesture.delegate = self

self.tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.handleTapGesture(gesture:)))
self.tapGesture.delegate = self

collectionView?.addGestureRecognizer(self.longPressGesture)
collectionView?.addGestureRecognizer(self.tapGesture)
}

我的点击功能:

@objc func handleTapGesture(gesture: UITapGestureRecognizer) {
self.performSegue(withIdentifier: "displayImage", sender: self)
}

还有我的长按功能:

@objc func handleLongGesture(gesture: UILongPressGestureRecognizer) {
switch(gesture.state) {
case .began:
print("begin hold!")
guard let selectedIndexPath = self.collectionView?.indexPathForItem(at: gesture.location(in: self.collectionView)) else {
break
}
self.collectionView?.beginInteractiveMovementForItem(at: selectedIndexPath)
case .changed:
print("change hold!")
self.collectionView?.updateInteractiveMovementTargetPosition(gesture.location(in: gesture.view!))
case .ended:
print("end hold!")
UIView.performWithoutAnimation {
self.collectionView?.endInteractiveMovement()
}
default:
print("cancel hold!")
self.collectionView?.cancelInteractiveMovement()
}
}

当崩溃时,我得到

libc++abi.dylib: terminating with uncaught exception of type NSException

这似乎发生在 func handleLongGesture() 中嵌入的 .changed-case 中。

有什么想法吗?我们将不胜感激。

最佳答案

经过几个小时的苦苦挣扎,我终于找到了导致问题的原因。它与手势无关,但与 Collection View 及其数据有关。在 viewWillAppear() 中,我通过将缩略图重新添加到数组来更新 View :

self.thumbnails.removeAll()
for i in 0 ..< self.images.count {
... adding new (updating) thumbnails ...
}

但由于某种原因,我忘记调用thumbnails.removeAll(),导致数据重复,而没有在 Collection View 上调用reloadData(),导致它崩溃。

关于Swift:切换 View 后使用 UILongPressGestureRecognizer 时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47949114/

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