UIButton действие одновременных кликов в зависимости от количества - PullRequest
0 голосов
/ 04 февраля 2019

Если пользователь нажимает 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)
            }
        }
    }

пожалуйста, не стесняйтесь, дайте мне больше информации о том же самом и предложите мне разобраться с этим лучше.

Спасибо

1 Ответ

0 голосов
/ 17 февраля 2019

Хорошо, я понимаю, что вы не хотите отслеживать фактическое время, когда нажимается кнопка, а только подсчитывает количество нажатий за некоторое разумное время, предполагая, что несколько нажатий один за другим относятся к одному и тому же действию (подмигивание, счастье, реакция).

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...