Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- UIKit
- 파이썬
- SwiftUI
- Kotlin
- error
- 백준 온라인 저지
- 정렬
- Swift공부
- dfs
- BFS
- 프로그래머스
- Autolayout
- 그리디 알고리즘
- 앱개발
- 알고리즘 공부
- Algorithm
- ios
- 안드로이드 공부
- Python
- greedy algorithm
- 백준온라인저지
- 알고리즘
- 오토레이아웃
- iOS개발
- 파이썬 풀이
- swift
- 공부
- Level 1
- Clean Architecture
- Android
Archives
- Today
- Total
Tori의 개발 공부
[SwiftUI] 다크모드 대응 ColorScheme 본문
향상된 사용자 경험을 제공하기 위해서 다크 모드에 대해 적절한 대응을 해야 한다.
SwiftUI를 통해 프로젝트를 진행하면서 다크 모드에 대응하는 방법을 알아볼까 한다.
생각보다 엄청 단순했다.
바로 ColorScheme를 이용하는 방법이다.
colorScheme | Apple Developer Documentation
colorScheme | Apple Developer Documentation
The color scheme of this environment.
developer.apple.com
ColorScheme는 화면 모드에 관련된 환경 변수이다.
이를 통해 현재 컬러스킴값을 가져오는 것은 물론 뷰의 환경값이 변경되면 이를 감지하여 뷰에 반영을 해준다.
이를 통해 한번 뷰를 간단하게 구현해 보겠다.
import SwiftUI
struct SecondView: View {
@Environment(\\.colorScheme) var scheme
var body: some View {
Text("Hello, World!")
.font(.title)
.foregroundStyle(scheme == .light ? Color.red : Color.green)
.padding()
Text("Color Extension")
.font(.title)
.foregroundStyle(Color.textColor1(scheme: scheme))
}
}
#Preview {
SecondView()
}
extension Color {
static func textColor1(scheme: ColorScheme) -> Color {
switch scheme {
case .light:
return .red
case .dark:
return .green
@unknown default:
return .red
}
}
}
- 첫 번째 텍스트 단순히 foregroundStyle에서 바로 스킴값을 비교하여 알맞은 컬러를 반환하였다.
- 두 번째 텍스트 익스텐션을 이용하여 스킴값을 넣어주면 그에 알맞은 색상을 반환하는 함수를 만들어 조금 더 간결하게 표현해 보았다.
Assets Color
단순히 작성하느라 기본 컬러 코드로 예제를 작성하였지만 에셋에 컬러 셋을 추가하는 경우에는
라이트모드에서 사용할 색상을 Any Appearance에, 다크모드에서 지원할 색상을 Dark에 정의한 뒤
똑같이 뷰 상단에 ColorScheme 환경 변수 선언 후
간단히. foregroundStyle(Color(”에셋 네임”))만 사용하면 손쉽게 사용할 수 있다.
'IOS App Programming > IOS 연습' 카테고리의 다른 글
[SPM 라이브러리 배포] 다크 모드 대응 커스텀 라이브러리 제작기 (0) | 2024.06.06 |
---|---|
[iOS] UIKit 과 SwiftUI 의 차이점 - 명령형과 선언형의 차이 (0) | 2024.04.03 |
[SwiftUI/WatchOS] WatchConnectivity - WCSession을 이용하여 WatchOS와 IOS 데이터 주고 받기 (0) | 2024.03.20 |
ActivitiKit 사용해보기(IOS 16.2 이후 업데이트 버전) (0) | 2024.03.13 |
[IOS] URLSessrion을 통해 CLOVA Sentiment API 사용기 (1) | 2024.02.27 |