본문 바로가기
iOS

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

by teamnova 2023. 9. 8.

안녕하세요.
오늘은 제한 시간을 두고 과제를 수행하는 앱을 위한 카운트다운 타이머를 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)
    }
}

 

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

 

'iOS' 카테고리의 다른 글

[iOS][SwiftUI] 달력 만들기  (0) 2023.07.04
[iOS][SwiftUI] 스톱워치 만들기  (0) 2023.06.19
[iOS][SwiftUI] Todo 만들기  (0) 2023.05.24
[iOS][SwiftUI] 메모장 만들기  (0) 2023.05.07
[iOS][Swift UI] 계산기 예제  (0) 2023.04.20