Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 

Repository files navigation

Timer

음악 플레이어 디자인의 맥용 타이머 프로그램

Timer GIF

사용 기술

  • Swift
  • SwiftUI
  • AppKit

주요 기능

⏰ 시간 설정

  • Picker를 통한 hour, minutes, seconds 설정
  • HH:MM:SS 형식으로 시간 표시
  • 종료 5초 전 빨간색으로 변경되는 타이머 표시

📊 진행 상태

  • 실시간 프로그레스 바 표시
  • 왼쪽: 진행 시간 / 오른쪽: 남은 시간
  • 회전하는 레코드 판 애니메이션 (설정 시간 동안 1회전)

🎛 컨트롤

  • Play/Pause: 타이머 일시정지 및 재생
  • Backward: 설정 시간으로 초기화
  • Forward: 타이머 및 설정 시간 초기화
  • 종료 시 비프음 알림

트러블 슈팅

1. 문제 발견

프로그램을 테스트하는 동안 다음과 같은 현상이 매 테스트마다 동일하게 나타나는 것을 확인하였습니다.

  1. 타이머가 종료된 후에도 레코드 이미지가 회전된 상태로 남아 있음.
  • 예상 동작: 타이머가 끝나면 이미지가 원래 위치(0도)로 돌아와야 함.
  • 실제 동작: 타이머가 끝나도 회전된 상태가 유지됨.
  1. 타이머를 초기화했을 때 회전이 원래대로 돌아오지 않음.
  • backward 버튼을 눌러도 회전이 초기화 되지 않음.
  • 예상 동작: 재설정하면 회전이 0도로 돌아와야 함.
  • 실제 동작: 회전이 마지막 위치에 그대로 멈춰 있음.
  1. 타이머를 다시 시작했을 때 레코드 이미지가 예상보다 빠르게 또는 느리게 회전하는 경우가 발생함
  • 이전 타이머 종료 후 다시 시작할 때 회전 애니메이션이 비정상적으로 동작함.
  • 예상 동작: 새 타이머가 시작되면 처음 위치에서 일정하게 회전해서 설정한 시간동안 정확히 한바퀴를 회전해야 함.
  • 실제 동작: 이전 회전 값이 남아 있어 새 타이머에서도 영향을 미침.

발견된 문제점

  1. 타이머 종료 후 회전 상태 유지

    • 예상: 타이머 종료 시 0도 위치로 복귀
    • 실제: 회전 상태 유지됨
  2. 초기화 시 회전 리셋 실패

    • 예상: backward 버튼으로 0도 위치로 복귀
    • 실제: 마지막 회전 위치 유지
  3. 비정상적인 회전 속도

    • 예상: 설정 시간 동안 정확히 1회전
    • 실제: 이전 상태값 영향으로 속도 불규칙

원인 분석

  • rotation 값 미초기화
  • isPlaying false 상태에서 애니메이션 지속
  • 애니메이션 종료 상태 미정의

3. 해결 접근 방법

  1. rotation 초기화 로직 추가
  • 타이머가 종료되거나 초기화될 때 rotation = 0으로 설정하면 회전 애니메이션이 정상적으로 초기화될 것이라 가정.
  • 기존의 restTimer() 함수에서 rotaiton 값을 초기화하도록 수정.
  • 결과: 재설정 버튼을 누르면 rotation이 0으로 초기화되면서 처음 위치로 되돌아감.
  1. 애니메이션 제어 개선
  • isPlaying이 false가 될 때 애니메이션이 자동으로 리셋되지 않는 문제를 해결해야 함.
  • .animation(nil, value: rotaion)을 활용해 애니메이션을 강제로 중지
  • 결과: 타이머가 멈추면 애니메이션이 중단됨.
  1. 자동 초기화 구현
  • 타이머가 종료 시 회전 값을 0으로 초기화하는 로직이 없으므로 timerRemaining == 0이되면 회전을 자동으로 초기화하는 코드 추가.
  • 결과: 타이머가 종료되면 rotation이 자동으로 초기화됨.

학습 포인트

  • SwiftUI의 .animation()은 isPlaying이 false가 되더라도 자동으로 애니메이션을 멈추지 않으므로, 명확하게 nil을 설정해야 함
  • onReceive에서 상태를 관리할 때, 종료 조건을 세밀하고 명확히 처리해야 함
  • 애니메이션의 상태를 초기화하는 과정이 중요하며, 회전 값을 수동으로 조정해야 함

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages