uibutton - UIButton 同时点击动作取决于计数
问题描述
如果用户单击 1 次且单击/按下少于 5 次,则应调用OneTimeClickAction
func ,
如果用户同时或连续 5 次且少于 10 次单击/按下,则应该调用FiveTimeClickAction
func
如果用户同时或连续点击/按下超过 10 次,则应该调用tenTimeClickAction
func 。
{
guard let tempDate = self.lastTappedAt else { return }
let elapsed = Date().timeIntervalSince(tempDate)
let duration = Int(elapsed)
print(duration)
if duration < 2 {
tapCount = tapCount + 1
// return
} else {
tapCount = 0
}
self.lastTappedAt = Date()
if tapCount > 9 {
let dispatchTime = DispatchTime.now() + 3.0
DispatchQueue.main.asyncAfter(deadline: dispatchTime) {
self.didTappedTenTimes(.happy)
}
return
}
if ((tapCount < 6) && (duration > 2)) {
let dispatchTime = DispatchTime.now() + 3.0
DispatchQueue.main.asyncAfter(deadline: dispatchTime) {
self.didTappedFiveTimes(.react)
}
return
}
if tapCount == 0{
let dispatchTime = DispatchTime.now() + 3.0
DispatchQueue.main.asyncAfter(deadline: dispatchTime) {
self.didTapped(.wink)
}
}
}
请随时让我更深入地了解相同的情况,并建议我以更好的方式处理这个问题。
谢谢
解决方案
好的,我知道您不想跟踪按下按钮的实际时间,而只想在某个合理的时间内计算点击次数,假设多个点击一个接一个属于同一动作(眨眼,快乐,反应)。
var tapCount = 0
var lastTappedAt: Date = Date()
func scheduleCheckResult() {
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1) {
let timePassedSinceLastTap = Int(Date().timeIntervalSince(self.lastTappedAt))
print("last tap was \(timePassedSinceLastTap) ago")
// Wait a bit more for resolving final reaction. Adjust if you want quicker/slower taps (more than 1s for slower, less for quiceker)
guard timePassedSinceLastTap > 1 else {
return self.scheduleCheckResult()
}
print("FINISHED WITH: \(self.tapCount)")
// Verify result
switch self.tapCount {
case let n where n >= 10:
print("Super duper happy")
case let n where n >= 5:
print("Very happy")
default:
print("Medium happy")
}
// Reset state
self.tapCount = 0
}
}
@IBAction func didTap() {
if tapCount == 0 {
scheduleCheckResult()
}
lastTappedAt = Date()
tapCount += 1
}
推荐阅读
- ios - 如何使用 SwiftUI 删除列表中的突出显示?
- string - 即使 sring 不同,也会进入状态
- javascript - 如何使用 puppeteer 按占位符选择元素
- sql-server - 如果从数据库连接,则无法在 Spotfire Webplayer 上查看仪表板
- jquery - 我可以在匹配的孩子中使用 jQuery
- node.js - nodejs http.request方法没有响应,回调没有错误
- r - 在 macOS 上通过 R 连接到 SQL Server
- c++ - 当一个类在构造函数中动态分配自己时,为什么会发生堆栈溢出而不是 std::bad_alloc?
- javascript - 如果 Field 的类型是数字,Redux-form 的 Field 组件不会触发 normalize 功能
- vue.js - 如何在 vue-status-indicator 中动态更改道具?