我正在开发一个 iPhone 应用程序,该应用程序要求我检查按钮是否已被点击并按住 6 秒钟,然后触发一个正在播放某种声音的 Action 。
我应该如何检测这 6 秒的点击?
另一方面,用户也可以继续点击按钮 6 秒,然后应该触发相同的操作。
我应该如何处理多次点击,我怎么知道所有的点击都在 6 秒括号内?
最佳答案
对于六秒长按,使用 UILongPressGestureRecognizer
其 minimumPressDuration
属性设置为 6。
自己写gesture recognizer (例如,LongTappingGestureRecognizer
)用于在给定时间段内连续点击;它不应该太棘手。给它一个属性,例如 UILongPressGestureRecognizer
的 minimumPressDuration
(例如,minimumTappingDuration
)和一个属性(例如,maximumLiftTime
)这决定了手指在不被视为长敲击手势之前可以抬起多长时间。
- 当它第一次收到
touchesBegan:withEvent:
时, 记录时间。 - 当它收到
touchesEnded:withEvent:
时, 启动NSTimer
(提升计时器)在maximumLiftTime
之后向手势识别器发送取消消息(例如cancelRecognition
)。 - 当它收到
touchesBegan:withEvent:
时有开始时间,取消电梯计时器(如果有)。 cancelRecognition
将转换为 failed state .
在 minimumTappingDuration
之后,有多种策略可用于处理手势结束时的识别。一种是检查 touchesBegan:withEvent:
和 touchesEnded:withEvent:
处理程序,如果当前时间和开始时间之间的差异 >= minimumTappingDuration
。这样做的问题是,如果用户缓慢敲击并且在达到 minimumTappingDuration
时手指向下,则识别手势的时间将比 minimumTappingDuration
长。另一种方法是在收到第一个 touchesBegan:withEvent:
时启动另一个 NSTimer(识别计时器),这将导致转换到 recognized state。并在 cancelRecognition
中取消。这里棘手的事情是如果在计时器触发时手指被抬起该怎么办。最好的方法可能是将两者结合起来,如果手指被抬起,则忽略识别计时器。
还有更多细节,但这就是要点。基本上,它是一个长按识别器,可以让用户将手指短暂地离开屏幕。您可能只使用点击识别器并跳过长按识别器。
关于iphone - 在 iPhone 上检测长按,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4013896/