iOS에서 5초간 사용자 비활성 상태 감지하기
iOS 애플리케이션을 개발하다 보면 화면이 일정 시간 동안 비활성 상태일 때 특정 작업을 수행해야 하는 경우가 종종 있습니다. 예를 들어, 일정 시간 동안 입력이 없으면 자동으로 로그아웃하거나 잠금 화면을 표시하는 기능이 대표적입니다.
이번 글에서는 5초 동안 사용자 비활성 상태를 감지하는 방법을 알아보겠습니다. 여기서는 Apple에서 제공하는 UITapGestureRecognizer를 활용하며, 자세한 사항은 Apple 공식 문서(UITapGestureRecognizer)에서 확인할 수 있습니다.
동작 방식
앱이 실행되는 즉시 타이머가 시작됩니다. 사용자가 5초 이내에 화면을 터치하지 않거나 아무런 조작도 하지 않으면 "User inactive for more than 5 seconds."라는 메시지가 출력됩니다. 반대로 사용자가 화면을 터치하면 타이머가 초기화되어 다시 5초부터 카운트가 시작됩니다.
구현 단계
1단계: Xcode를 실행하고 Single View Application 템플릿으로 새 프로젝트를 생성한 뒤, 프로젝트 이름을 "DetectingInactivity"로 지정합니다.
2단계: 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단계: 앱을 실행합니다!
코드 설명 및 실행 결과
앱이 실행되면 viewDidLoad()에서 5초 간격의 타이머가 시작됩니다. 이후 사용자가 5초 동안 화면을 터치하지 않으면 doStuff() 함수가 호출됩니다. 이 함수 안에는 사용자가 일정 시간 동안 화면을 조작하지 않았을 때 수행하고 싶은 작업을 자유롭게 구현할 수 있으며, 예제에서는 콘솔에 메시지를 출력한 후 timer.invalidate()로 타이머를 중지합니다.
사용자가 화면을 터치하면 UITapGestureRecognizer에 의해 resetTimer() 함수가 호출됩니다. 이 함수는 기존 타이머를 무효화한 뒤 새로운 5초 타이머를 다시 시작하므로, 사용자가 계속 화면을 조작하는 동안에는 비활성 감지 로직이 실행되지 않습니다.