Swift 7주차 - 알람 시계 만들기

2024. 4. 18. 16:28swift

Swift 7주차 - 알람 시계 만들기

 

이번 주차에서는 얼럿(Alert)를 사용해 경고 메시지 기능을 추가하여 알람 시계를 만들어 볼 예정이다.

 

조건 :

 

1. 현재 시간과 알람 시간이 같아지면 얼럿으로 알람 메시지를 나타내본다.

+ 얼럿창이 뜸과 동시에 배경색을 빨간색으로 바꾼다.

 

2. 얼럿창에서 확인버튼을 누르면 배경색을 다시 하얀색으로 바꾼다.

 

 

목차

     

    얼럿(Alert)

     

    얼럿은 사용자에게 즁요한 알람이나 경고 메시지를 나타내야 할 때 사용된다.

     

    사용자의 주의를 집중시키는 경고로 마무리할 수도 있고 후속 조치를 취할 수도 있다.

     

     

     

    알람 시계 만들기

     

    지난번 4주차 도전문제로 만들었던 알람 시계를 그대로 가져와보자.

     

    아래 링크로 들어가서 ViewController와 Main.storyboard를 따라 만들어보면 된다.

     

    Swift 4주차 - 데이트 피커 사용하기 (알람 시계 만들기)

     

     

     

     

    Main.storyboard를 따라 만들때 데이트 피커의 Preferred Style을 Wheels로, Locale을 Korean으로 설정해줘야 한다.

     

     

     

    코드를 복붙한 후 아웃렛 변수와 액션 함수를 각각 알맞게 연결해주자.

     

     

    얼럿 기능 추가하기

     

    이제 가져온 코드를 수정해서 얼럿 기능을 추가해보자.

     

     

    먼저 상단에 얼럿창이 떴는지 안떴는지 확인하기 위한 alertFlag 변수를 추가하자.

     

     

     

     

    그 다음으로 updateTime 함수에서 아래 드래그 한 코드를 지우자.

     

    (해당 코드는 이전에 현재 시간과 알람으로 맞춘 시간이 같으면 배경색을 빨간색으로 바꾸는 코드인데 이번 실습에서는 추가로 얼럿창까지 띄울 예정이기 때문에 지우고 새로 작성하려고 한다.)

     

     

     

    그리고 해당 자리에 아래 코드를 붙여넣어주자.

     

    if (alarmTime == currentTime) {
        if !alertFlag {
            view.backgroundColor = UIColor.red
    
            let lampOnAlert = UIAlertController(title: "알림", message: "설정된 시간입니다!!!", preferredStyle: UIAlertController.Style.alert)
    
            let onAction = UIAlertAction(title: "네, 알겠습니다.", style: UIAlertAction.Style.default, handler: {
            ACTION in self.view.backgroundColor = UIColor.white
            })
    
            lampOnAlert.addAction(onAction)
            present(lampOnAlert, animated: true, completion: nil)
                    
            alertFlag = true
        }
    } else {
        alertFlag = false
    }

     

     

    위 코드는 현재 시간과 알람 시간이 같고 alertFlag가 false라면 배경색을 빨간색으로 바꾸고 얼럿창을 띄운 후 얼럿창을 닫으면 클로저 함수를 통해 다시 배경색을 하얀색으로 바꾸는 로직이다.

     

     

    데이트 피커로 알람 시간을 선택하고 해당 시간이 되면 위 화면처럼 얼럿이 뜨고 배경색이 빨간색으로 바뀌게 된다.

     

     

    '네, 알겠습니다.' 버튼을 누르면 아래 화면처럼 얼럿창이 사라지고 다시 배경색이 하얀색으로 바뀌게 된다.

     

     

     

    전체 코드 :

     

    import UIKit
    
    class ViewController: UIViewController {
        
        let timeSelector: Selector = #selector(ViewController.updateTime)
        let interval = 1.0
        var count = 0
        var alarmTime = ""
        var alertFlag = false
        
        @IBOutlet var lblCurrentTime: UILabel!
        @IBOutlet var lblPickerTime: UILabel!
        
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
            
            Timer.scheduledTimer(timeInterval: interval, target: self, selector: timeSelector, userInfo: nil, repeats: true)
        }
    
        @IBAction func changeDatePicker(_ sender: UIDatePicker) {
            let datePickerView = sender
            let formatter = DateFormatter()
            
            formatter.dateFormat = "yyyy-MM-dd HH:mm EEE"
            lblPickerTime.text = "선택시간: " + formatter.string(from: datePickerView.date)
            
            formatter.dateFormat = "hh:mm aaa"
            alarmTime = formatter.string(from: datePickerView.date)
        }
        
        @objc func updateTime() {
            let date = NSDate()
            let formatter = DateFormatter()
            
            formatter.dateFormat = "yyyy-MM-dd HH:mm:ss EEE"
            lblCurrentTime.text = "현재시간: " + formatter.string(from: date as Date)
            
            formatter.dateFormat = "hh:mm aaa"
            let currentTime = formatter.string(from: date as Date)
            
            if (alarmTime == currentTime) {
                if !alertFlag {
                    view.backgroundColor = UIColor.red
                    
                    let lampOnAlert = UIAlertController(title: "알림", message: "설정된 시간입니다!!!\n202316035 박준혁", preferredStyle: UIAlertController.Style.alert)
    
                    let onAction = UIAlertAction(title: "네, 알겠습니다.", style: UIAlertAction.Style.default, handler: {
                            ACTION in self.view.backgroundColor = UIColor.white
                    })
    
                    lampOnAlert.addAction(onAction)
                    present(lampOnAlert, animated: true, completion: nil)
                    
                    alertFlag = true
                }
            } else {
                alertFlag = false
            }
        }
    }