APP-iOS3rd / PJ3T2_Mymory

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

[Feat]: Font 동적으로 변경하게하기 #195

Closed xohxe closed 9 months ago

xohxe commented 9 months ago

PR 가이드라인

PR Checklist

PR 날릴 때 체크 리스트

PR Type

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

Issue Number: #177

PR 설명하기

어떻게 작동하나요? code 기반으로 설명해주세요

기존 FontViewModel.swift 파일을 FontManager.swift 로 이름을 변경했어요. 파일위치 또한 ViewModel 폴더에서 Source>Shared로 이동했습니다. 해당 부분 머지 시 충돌할 수 있으니 유의해주세요!

FontView에서 선택한 폰트를 UserDefault에 저장하고 로드하기 위해 FontManager를 싱글톤 패턴으로 구현했어요.

final class FontManager: ObservableObject {

    static let shared = FontManager()
    @Published var userFontPreference: FontType?

    func saveFontPreference(fontType: FontType) {
        UserDefaults.standard.set(fontType.rawValue, forKey: "selectedFontType")

        DispatchQueue.main.async {
            self.userFontPreference = fontType
        }
    }

}

전체 코드는 FontManager.swift 파일에서 확인해주시고, 사용방법에 대해 간단히 설명드리기 위해 필수적인 내용만 소개하고 넘어갈게요.

먼저, Font Extension에 메서드를 추가했어요. 해당 부분은 FontManager에서 저장한 값을 불러오기 위해 userMainTextFont 라는 메서드를 추가했어요.

extension Font {

    // 사용자의 메인 텍스트 폰트를 반환하는 메서드
    static func userMainTextFont(baseSize: CGFloat = 16) -> Font {
        let fontType = FontManager.shared.fontPreference
        let adjustedSize = FontManager.shared.fontSize(for: fontType, baseSize: baseSize)
        return .custom(fontType.rawValue, size: adjustedSize)
    }

}

사용방법에 대해

이제는 사용방법에 대해 빠르게 알아보시죠. 실제 View 에 적용할 때는 아래와 같이 작성해주시면 됩니다.

  Text("적용할 폰트에 아래와 같이 적용해주세요.")
         .font(.userMainTextFont(baseSize: 20))

가능하다면 추가해주세요

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

https://github.com/APP-iOS3rd/PJ3T2_Mymory/assets/75136643/557ef9e8-9bcb-4f49-9ae2-a4f50576c74c

기타 언급해야 할 사항들