iOS

[IOS] TimerClass 이용해 카운트다운 타이머 만들기

teamnova 2023. 9. 8. 12:00
728x90

안녕하세요.
오늘은 제한 시간을 두고 과제를 수행하는 앱을 위한 카운트다운 타이머를 iOS에서  구현하는 방법을 알아보도록 하겠습니다. 

구직 로직은 간단합니다.
타이머 클래스를 이용해서 원하는 초단위가 0이 될때까지 매 1초 마다 1초씩 빼줍니다.

코드는 아래와 같습니다.

import Foundation
import SwiftUI

struct TimeTest : View{
    @State private var remainingSeconds = 10 * 60 //10분 타이머 세팅
    @State private var isCountdownOver = false //카운트 다운 끝 = false 세팅
    
    var body: some View{
        VStack{
            CountdownView1(remainingSeconds: $remainingSeconds, isCountdownOver: $isCountdownOver)
        }
    }
}

struct CountdownView1: View {
   
    @Binding var remainingSeconds: Int //메인 View에서 선언한 변수 사용
    @Binding var isCountdownOver: Bool

    
    // 매 1초마다 루프를 돌리는 timer 생성
    let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()

    var body: some View {
        Text(timeString(remainingSeconds)) //화면에 보이는 text 설정
            .font(.title3)
            .onReceive(timer) { _ in
                if remainingSeconds > 0 { //0초가 되기 전이면
                    remainingSeconds -= 1 //1초씩 뺌
                } else {
                    isCountdownOver = true //0초가 되면 isCountdownOver변수를 true로 변경
                }
            }
    }
    
    //초단위로 입력된 remainingSeconds변수를 분과 초 단위로 나눠주기
    func timeString(_ seconds: Int) -> String {
        let minutes = seconds / 60
        let seconds = seconds % 60
        return String(format: "%02d:%02d", minutes, seconds)
    }
}

 

실행시 다음과 같은 결과를 얻을 수 있습니다.