iOS 타이머 앱 개선사항 정리

호씨·2025년 1월 9일
1

iOS 타이머 앱 개선사항 정리

1. UI/UX 개선

1.1 레이블 입력 UI 개선

  • 기존: 단순 TextField로 구현
  • 개선:
    • 레이블 컨테이너 뷰 추가 (labelContainerView)
    • 좌측에 "레이블" 텍스트 라벨 추가 (labelTextLabel)
    • 우측에 이름 입력 필드 배치 (nameTextField)
    • 전체적인 디자인 통일성 향상

1.2 타이머 종료 옵션 추가

  • 새로운 "타이머 종료 시" 버튼 추가 (timerEndButton)
  • 사용자가 타이머 종료 시 동작을 설정할 수 있는 UI 요소 추가
  • 좌측 정렬과 적절한 패딩으로 가독성 향상

1.3 테이블뷰 기능 강화

  • 스와이프 삭제 기능 추가
    • canEditRowAttrailingSwipeActionsConfiguration 메서드 구현
    • 직관적인 삭제 UX 제공

2. 데이터 관리 개선

2.1 타이머 삭제 기능 강화

  • CoreData와 로컬 데이터의 동기화 로직 개선
func deleteTimer(at index: Int) {
    guard index < timerItems.count else { return }
    let timers = coreDataManager.fetchTimers()
    guard index < timers.count else { return }
    
    DispatchQueue.main.async { [weak self] in
        guard let self = self else { return }
        self.coreDataManager.deleteTimer(timers[index])
        self.timerItems.remove(at: index)
    }
}
  • 메인 스레드에서 안전하게 삭제 작업 수행
  • 데이터 정합성 보장을 위한 인덱스 검증 강화

2.2 CoreData 저장 로직 개선

  • TimerCoreDataManagerdeleteTimer 메서드 개선
func deleteTimer(_ timer: TimerItem) {
    context.delete(timer)
    try? context.save() // 즉시 저장 시도
}
  • 삭제 후 즉시 저장을 시도하여 데이터 일관성 유지

3. 코드 품질 개선

3.1 UI 컴포넌트 초기화 로직 분리

  • setupComponents 메서드 내부 구조화
  • 각 UI 요소별 설정을 명확하게 구분
  • 코드 가독성과 유지보수성 향상

3.2 Auto Layout 개선

  • SnapKit을 사용한 제약조건 설정 개선
  • 동적 크기 조정을 위한 제약조건 추가
  • 레이아웃 코드의 구조화 및 가독성 향상

4. 추가된 기능

4.1 타이머 선택 시 동작 개선

  • 타이머 선택 시 이름 자동 설정 기능 추가
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let timer = viewModel.timerItems[indexPath.row]
    viewModel.setTimer(hours: timer.hours,
                      minutes: timer.minutes,
                      seconds: timer.seconds)
    nameTextField.text = timer.name
    tableView.deselectRow(at: indexPath, animated: true)
}

4.2 시간 감소 버튼 추가

  • 시, 분, 초 각각에 대한 감소 버튼 추가
  • 순환식 감소 로직 구현 (0에서 감소 시 최대값으로 변경)
func decrementHours() {
    hours = hours > 0 ? hours - 1 : 23
}

func decrementMinutes() {
    minutes = minutes > 0 ? minutes - 1 : 59
}

func decrementSeconds() {
    seconds = seconds > 0 ? seconds - 1 : 59
}
profile
이것저것 많이 해보고싶은 사람

0개의 댓글

관련 채용 정보