gpt4 book ai didi

ios - LongPressHold 开关未评估为已结束/失败(跌落和跌落卡住)

转载 作者:行者123 更新时间:2023-11-30 12:47:16 25 4
gpt4 key购买 nike

我有一个 UITableView,我向其中添加了 UILongPressGestureRecognizer。当按住某个单元格时,它会触发一个评估手势状态的开关:

switch state { 
case UIGestureRecognizerState.began:
//Takes a snapshot of the cell, shows image and hides cell
print("User held cell.")
case UIGestureRecognizerState.changed:
//Runs when cell-snapshot is dragged
print("LocationInView is: \(location)")
default:
//Runs when the user "lets go" of the cell
print("User let go.")
}

在测试过程中,如果将单元格拖到表格上方或下方并松开,单元格就会卡住。如果拖回 table 上并放开,就可以了。

表格不会占据整个屏幕,如果用户尝试将单元格拖出表格边界,单元格会停在表格边缘。当您在“出界”时放手时,单元格会永久卡住在边缘。

enter image description here

如果开关告诉我手势已完成,我可以简单地隐藏单元格,但问题是默认值永远不会触发。如果用户离开 table 后抬起手指,开关永远不会评估为默认值。

现在 UIGestureRecognizerState 具有“已取消”、“已结束”和“失败”状态,那么为什么它们不触发默认状态呢?我有打印语句来显示正常的手指抬起:

enter image description here

在 table 区域外抬起手指:

enter image description here

最佳答案

这个问题的答案在代码中并不明显,但在图像中。单元格被拖“出界”,或离开表格/拖到其边缘。一旦到达那里,它就无法传递要评估的indexValue!

这是解决方案,因为大多数 tableView 拖放代码将首先检查 nil,包括我自己的:

    if indexPath != nil {
switch state {
case UIGestureRecognizerState.began:
...

棘手的部分是如何处理现在无法评估识别器状态的情况...它是否结束/失败/取消?如果我要重新开始,我会尝试将识别器添加到全屏 View 中,这样无论用户的手指放在哪里,我都可以始终监视gestureRecognizer状态。

关于ios - LongPressHold 开关未评估为已结束/失败(跌落和跌落卡住),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41491805/

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