背景
あるB2Bアプリを作成中に、アプリユーザの方(企業側)がお客様にアプリを操作してもらう際に、お客様が勝手にアプリをログアウトしないように、ログアウトボタンを隠しボタンかつ3回連続タップで反応するようにしてほしいとの依頼を受け、作成しました。3回連続タップなので、タップとタップに間が空いてしまった場合は、再度3回連続でタップしないといけないようにしています。Timerを使用しました。
ソースコード
ViewController.swift
import UIKit
class TopViewController: UIViewController {
var logoutTapCount = 0 // ボタンをタップした回数をカウント
var countResetTimer: Timer! // ボタンタップから次のボタンタップまでの時間を測る
override func viewDidLoad() {
super.viewDidLoad()
}
/// 隠しログアウトボタンタップ時
/// 隠ボタンなので、storyboard上でbackground colorをclearにしています
/// - Parameter sender: 隠しログアウトボタン
@IBAction func tapLogoutButton(_ sender: Any) {
logoutTapCount += 1 // ボタンを押すとカウントをあげる
if logoutTapCount == 3 { // カウントが3のときログアウトできる
logout() // ログアウトするための関数。今回は記載していません。
}
// ボタンを押した後にタップとタップに5秒以上空いた際にタップカウントをリセットする
countResetTimer = Timer.scheduledTimer(
timeInterval: 5,
target: self,
selector: #selector(self.countReset),
userInfo: nil,
repeats: true)
}
func countReset() {
logoutTapCount = 0
}
}
最後に
Timer関数便利ですね。こちらでポーリング機能を作成したりもしています。
連続タップのUIButtonを作成するいい方法があればご教示いただけると嬉しいです。