iOS
 Computer >> コンピューター >  >> プログラミング >> iOS

iOSで5秒間のユーザー非アクティブ(無操作)を検出する方法

iOSアプリを開発していると、画面が一定時間操作されなかった場合に何らかのアクションを実行したい場面に出くわすことがあります。

この記事では、ユーザーが5秒間画面を操作しなかったことを検出する方法を解説します。

実装には、Appleが提供するUITapGestureRecognizerを使用します。詳細は公式ドキュメントをご確認ください。
https://developer.apple.com/documentation/uikit/uitapgesturerecognizer

作成するアプリの概要

今回はシンプルなサンプルアプリを作成します。仕組みは以下のとおりです。

  • アプリ起動と同時にタイマーを開始する
  • ユーザーが5秒間画面にタッチせず、何も操作しなかった場合にメッセージ「User inactive for more than 5 seconds .」を表示する
  • ユーザーが画面にタッチした場合はタイマーをリセットし、再び5秒のカウントを開始する

それでは、さっそく始めましょう!

ステップ1:Xcodeプロジェクトを作成する

Xcodeを開き、「Single View Application」を選択して新規プロジェクトを作成します。プロジェクト名は「DetectingInactivity」とします。

ステップ2:ViewController.swiftにコードを追加する

次に、ViewController.swiftを開いて以下のコードをコピー&ペーストしてください。コードの詳しい解説は後述します。

import UIKit
class ViewController: UIViewController {
    // Timerクラスのオブジェクトを作成
    var timer = Timer()
    override func viewDidLoad() {
        super.viewDidLoad()
        timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(ViewController.doStuff), userInfo: nil, repeats: true)
        let resetTimer = UITapGestureRecognizer(target: self, action: #selector(ViewController.resetTimer));
        self.view.isUserInteractionEnabled = true
        self.view.addGestureRecognizer(resetTimer)
    }
    @objc func doStuff() {
        // 実行したい任意の処理をここに記述
        print("User inactive for more than 5 seconds .")
        timer.invalidate()
    }
    @objc func resetTimer() {
        timer.invalidate()
        timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(ViewController.doStuff), userInfo: nil, repeats: true)
    }
}

ステップ3:アプリを実行する

準備ができたらアプリを実行してみましょう。

コードの解説

アプリが起動すると同時にタイマーがセットされ、その後5秒間画面に触れなければdoStuff()関数が呼び出されます。この関数内には、ユーザーが一定時間操作しなかった場合に実行したい任意の処理を記述できます。本記事のサンプルでは、コンソールに「User inactive for more than 5 seconds .」と出力しています。

一方、ユーザーが画面にタッチするとresetTimer()関数が呼び出され、既存のタイマーが破棄されたうえで新しいタイマーがセットされます。これにより、画面がタッチされるたびに5秒の無操作判定カウントがリセットされる仕組みです。

  1. Windowsで標準ユーザーのタスクマネージャーを無効にする2つの方法

    タスクマネージャーは、Windowsに標準搭載されているユーティリティで、システム上で実行中のプロセスやアプリケーションの情報を表示し、メモリやCPUの使用状況を統計として確認できます。プロセスの終了や優先度の変更にも活用される便利なツールですが、子供や家族、同僚向けに設定した標準アカウントでは勝手に操作されないよう、タスクマネージャーを無効化したいと考えるユーザーも少なくありません。標準ユーザーとタスクマネージャーの関係バックグラウンドで動作している一部のアプリケーションやプロセスは、タスクマネージャーでしか強制終了できません。また、特定のプロセスの優先度を上げれば、そのプロセスに多くのメモ

  2. iOS 11の「永続通知」機能を有効にする方法|通知が消えずに残る設定を解説

    通知は、メッセージやチャットのやり取りを見逃さないために欠かせない機能です。しかし、iPhoneユーザーなら誰もが経験したことがあるはず。iOSの通知は表示時間が非常に短く、あっという間に消えてしまうため、肝心な通知を見逃してしまうことが少なくありません。 画面上に通知が溜まりすぎるのを防ぐという目的は理解できますが、デバイスが手元にないときなど、重要な通知を取り逃す原因にもなりかねません。 iOS 11のリリースからしばらく経ちますが、実はまだユーザーに知られていない便利な機能が数多く隠れています。Apple製品らしいことですが、iOS 11には魅力的な新機能が多数搭載されているのに、その存