투케이2K

25. (ios/swift) 흔들기 shake 이벤트 감지 및 팝업창 호출 실시 - motionBegan , motionCancelled , motionEnded 본문

IOS

25. (ios/swift) 흔들기 shake 이벤트 감지 및 팝업창 호출 실시 - motionBegan , motionCancelled , motionEnded

투케이2K 2021. 10. 24. 08:22
반응형

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT


[소스 코드]

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var displayText: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }


    // [흔들기 이벤트 동작 시작]
    var startMotionTime = ""
    var cancleMotionTime = ""
    var endMotionTime = ""
    override func motionBegan(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
        if motion == .motionShake {
            self.startMotionTime = self.getNowDate24()
            print("")
            print("===============================")
            print("[MainController > motionBegan() : 흔들기 이벤트 시작]")
            print("시간 : ", self.startMotionTime)
            print("===============================")
            print("")
        }
    }
    
    
    // [흔들기 이벤트 동작 취소]
    override func motionCancelled(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
        self.cancleMotionTime = self.getNowDate24()
        if motion == .motionShake {
            print("")
            print("===============================")
            print("[MainController > motionCancelled() : 흔들기 이벤트 취소]")
            print("시간 : ", self.cancleMotionTime)
            print("===============================")
            print("")
        }
    }
    
    // [흔들기 이벤트 동작 종료]
    override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
        if motion == .motionShake {
            self.endMotionTime = self.getNowDate24()
            print("")
            print("===============================")
            print("[MainController > motionEnded() : 흔들기 이벤트 종료]")
            print("시간 : ", self.endMotionTime)
            print("===============================")
            print("")
            
            // [모션 시작 시간 및 종료 시간을 date 로 변환]
            let dateFormatter = DateFormatter() // Date 포맷 객체 선언
            dateFormatter.dateFormat = "yyyyMMddHHmmss" // Date 포맷 타입 지정

            let start = dateFormatter.date(from: self.startMotionTime)
            let end = dateFormatter.date(from: self.endMotionTime)
            
            // [종료된 시간이 시작 시간보다 큰 경우]
            if Int(self.endMotionTime) ?? 0 >= Int(self.startMotionTime) ?? 0 {
                let useTime = Int(end!.timeIntervalSince(start!))
                print("")
                print("===============================")
                print("[MainController > motionEnded() : 흔들기 동작 시간 (초)]")
                print("초 : ", useTime)
                print("===============================")
                print("")
                
                // [동작 시간이 1초 이상인 경우 팝업창 호출]
                if useTime >= 1 {
                    let alert = UIAlertController(title: "이벤트 감지", message: "흔들기 이벤트가 동작되었습니다", preferredStyle: .alert)
                    alert.addAction(UIAlertAction(title: "확인", style: .default, handler: nil))
                    self.present(alert, animated: true, completion: nil)
                }
            }
        }
    }
    
    
    // [실시간 현재 시간 확인 함수]
    func getNowDate24() -> String {
        // [date 객체 사용해 현재 날짜 및 시간 24시간 형태 출력 실시]
        let nowDate = Date() // 현재의 Date 날짜 및 시간
        let dateFormatter = DateFormatter() // Date 포맷 객체 선언
        
        dateFormatter.dateFormat = "yyyyMMddHHmmss" // Date 포맷 타입 지정
        let date_string = dateFormatter.string(from: nowDate) // 포맷된 형식 문자열로 반환

        return date_string
    }
}

[결과 출력]


 

반응형
Comments