일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
- ios
- spring
- Complication
- Firebase
- Delegate Pattern
- UIStackView
- fcm
- swift concurrency
- github
- UITableView
- watchkit
- Coding Test
- SwiftUI
- widgetkit
- Project
- WWDC22
- 코테
- cloud functions
- app intents
- coreml
- Swift
- task.yield()
- tabman
- createml
- Sendbird
- Flutter
- backend
- Tuist
- Apple Developer Academy
- UIDatePicker
- Today
- Total
azhy의 iOS 이야기
[iOS] iOS16, 잠금화면 위젯 추가 본문
2022년 9월 27일에 작성됨
오늘은 iOS16에서 지원하는 잠금화면 위젯 추가에 대해 정리하려 합니다.
[iOS] WWDC22 - Complications and widgets: Reloaded - 잠금화면 위젯에 대한 WWDC22 영상 정리내용이니 꼭 한 번씩 보고 오세요!
if iOS16 { supportedFamilies }
제 프로젝트에서 사용하던 위젯입니다. 이제 잠금화면 위젯을 추가해 볼까요? 기존 위젯기능을 사용하고 계셨으면 생각보다 별로 어렵지 않습니다. 저는 .accessoryInline을 제외한 .accessoryCircular, .accessoryRectangular 두 위젯을 추가해 보겠습니다.
.accessoryCircular, .accessoryRectangular은 잠금화면 위젯, iOS16에서만 지원하는 WidgetFamily입니다. 따라서 iOS16 이상 이용자와 그보다 버전이 낮은 이용자를 구분을 해야 합니다.
if #available(iOSApplicationExtension 16.0, *) {
...
// iOS 16, 높은 버전 이용자
} else {
...
// iOS 16, 낮은 버전 이용자
}
우리는 이 if, else 문장을 가지고 WidgetFamily를 다르게 설정해줘야 합니다.
...
@main
struct coupleDayWidget: Widget {
...
private let supportedFamilies:[WidgetFamily] = {
if #available(iOSApplicationExtension 16.0, *) {
return [.systemSmall, .systemMedium, .accessoryCircular, .accessoryRectangular]
} else {
return [.systemSmall, .systemMedium]
}
}()
var body: some WidgetConfiguration {
...
}
}
...
iOS16 보다 낮은 버전의 이용자는 기존에 사용하던 WidgetFamily인 .systemSmall, .systemMedium만 사용하고, iOS16 보다 높은 버전의 이용자에게는 기존에 사용하던 WidgetFamily + .accessoryCircular, .accessoryRectangular 까지 사용하게 하는 겁니다. 여기까지 하면 준비는 끝났습니다.
Draw View
자 iOS16을 기준으로 WidgetFamily 세팅이 끝났으니 뷰를 그려줘야 되겠죠?? 뷰를 그리는 작업도 위와 동일하게 if, else 문장을 통해 View를 따로 그려주면 됩니다.
var body: some View {
if #available(iOSApplicationExtension 16.0, *) {
switch widgetFamily {
case .accessoryCircular:
// accessoryCircular View 코드
...
case .accessoryRectangular:
// accessoryRectangular View 코드
...
}
}
else {
switch widgetFamily {
...
}
}
}
case .accessoryCircular:, case .accessoryRectangular: 부분에 자신이 원하는 View를 작성해 주시면 됩니다. 이러면 모든 작업이 끝났습니다. 생각보다 정말 별거 없죠??
결과
나날이 갈수록 신기하면서 놀라운 기능들이 나오네요.. 다음 버전에는 또 어떤 기능들이 추가될지 무서우면서도 또 기대가 됩니다. 제가 틀렸거나 궁금하신 부분이 있으시면 댓글 남겨주세요 :)
'iOS' 카테고리의 다른 글
[iOS] Static Framework & Dynamic Framework (feat. Tuist) (0) | 2024.11.14 |
---|---|
[iOS] HIG, Human Interface Guide (0) | 2024.11.14 |
[iOS] The app references non-public in Payload 경고 (0) | 2024.11.14 |
[iOS] please delete it and use the new collections.json instead 경고 해결법 (1) | 2024.11.14 |
[iOS] URL Scheme, 다른 앱 호출하기 (구글맵, 카카오맵) (1) | 2024.11.14 |