APP-iOS3rd / PJ3T2_Mymory

멋쟁이사자처럼 iOS 앱스쿨 3기 팀 프로젝트
10 stars 3 forks source link

[Feat] PostView에서 메모지선택하게 하기 #228

Closed xohxe closed 7 months ago

xohxe commented 7 months ago

PR 가이드라인

PR Checklist

PR Type

어떤 종류의 PR인가요?

연관되는 issue 정보를 알려주세요

Issue Number: #225

PR 설명하기

1. 열거형으로 ThemeType 정의

Firebase에 메모지설정을 저장하기 앞서, 열거형으로 ThemeType 을 먼저 케이스를 정의해주었어요.

// ThemeManager.swift
enum ThemeType: String, CaseIterable {
    case system = "System"
    case light = "Light"
    case dark = "Dark"
    case atom = "Atom"
    // 각 테마 유형별로 속성 정의

    var isSelected: Bool {
        // 여기서 현재 선택된 테마와 비교하여 반환할 수 있음
        return false
    }

    var isPremium: Bool {
          // 테마별 프리미엄 여부 설정
          switch self {
          case .system:
              return false
          case .light:
              return false
          case .dark:
              return false
          case .atom:
              return true
          }

    }

    var textColor: Color {
          // 테마별 텍스트 색상 설정
          switch self {
          case .system:
              return Color.textColor // 기본 색상이나 시스템 색상 사용
          case .light:
              return Color.black
          case .dark:
              return Color.white
          case .atom:
              return Color.atomTextColor
          }
      }

      var bgColor: Color {
          // 테마별 배경 색상 설정
          switch self {
          case .system:
              return Color.bgColor // 기본 색상이나 시스템 색상 사용
          case .light:
              return Color.white
          case .dark:
              return Color.black
          case .atom:
              return Color.atomBgColor
          }
      }

      // 필요에 따라 더 많은 속성이나 메소드를 추가할 수 있음

}

2. ThemeManager를 통해 메모지 변경

현재 코드는 기기에서만 메모지를 변경하기 위해 UserDefault에 저장하는 방식으로 작성되었기 떄문에, 해당 부분은 많이 변경될 예정입니다.


final class ThemeManager: ObservableObject {

    static let shared = ThemeManager()
    @Published var userThemePreference: ThemeType?
    var themeList = ThemeType.allCases

    init(){
        self.userThemePreference = loadThemePreference()
    }

    func saveThemePreference(themeType: ThemeType) {
        UserDefaults.standard.set(themeType.rawValue, forKey: "selectedThemeType")

    }

    func loadThemePreference() -> ThemeType {
        guard let themeTypeString = UserDefaults.standard.string(forKey: "selectedThemeType"),
              let themeType = ThemeType(rawValue: themeTypeString) else {
            return .system
        }
        return themeType
    }

    var themePreference: ThemeType {
        get {
            guard let themeTypeString = UserDefaults.standard.string(forKey: "selectedThemeType"),
                  let themeType = ThemeType(rawValue: themeTypeString) else {
                return .system // 기본값으로 Regular 반환
            }
            return themeType
        }
        set {
            UserDefaults.standard.set(newValue.rawValue, forKey: "selectedThemeType")

            // userFontPreference도 함께 업데이트하여 @Published를 통해 변경 사항을 반영합니다.
           DispatchQueue.main.async {
               self.userThemePreference = newValue
           }
        }
    }

    func changeTheme(to selectedTheme:ThemeType) {
        saveThemePreference(themeType: selectedTheme)
        userThemePreference = selectedTheme
    }

     func isThemeSelected(_ theme: ThemeType) -> Bool {
         return userThemePreference == theme
     }

}

가능하다면 추가해주세요

변경 사항 스크린샷 혹은 화면 녹화

https://github.com/APP-iOS3rd/PJ3T2_Mymory/assets/75136643/a794d3fc-349c-4f81-8189-4e5e20d06923

https://github.com/APP-iOS3rd/PJ3T2_Mymory/assets/75136643/782edd04-08fd-4cd2-a7bd-6145f597eb5f

기타 언급해야 할 사항들