Big Idea (큰 주제)
- 코드분석
Essential Question (핵심 질문)
- Scrumdinger 에서 해당 코드를 쓴 이유에 대해 나는 잘 이해하고 있을까?
Challenge (도전 과제)
- 하나의 뷰에서 내가 모르는 코드에 대해 분석해보자
Activities (학습 활동)
다시...🥹또 시간 조절을 못하고 있다.
일단 정리!!
import SwiftUI
import SwiftData
struct ScrumsView: View {
@Query(sort: \DailyScrum.title) private var scrums: [DailyScrum]
@State private var isPresentingNewScrumView = false
var body: some View {
NavigationStack {
List(scrums) { scrum in
NavigationLink(destination: DetailView(scrum: scrum)) {
CardView(scrum: scrum)
}
.listRowBackground(scrum.theme.mainColor)
}
.navigationTitle("Daily Scrums")
.toolbar {
Button(action: {
isPresentingNewScrumView = true
}) {
Image(systemName: "plus")
}
.accessibilityLabel("New Scrum")
}
.sheet(isPresented: $isPresentingNewScrumView) {
NewScrumSheet()
}
}
}
}
#Preview {
ScrumsView()
}
.toolbar
toolbar 는 자주 사용하는 명령어나 컨트롤에 즉시 접근할 수 있도록 한다.
iOS 기기 종류에 따라 앱의 콘텐츠 위나 아래에 툴바를 표시할 수 있다. -> 여러 멀티플랫폼 기기 지원 시에는 활용할 것이 많을 듯 하다.
HIG 에 toolbar 관련한 내용도 있다고 한다.
https://developer.apple.com/documentation/SwiftUI/Toolbars
Toolbars | Apple Developer Documentation
Provide immediate access to frequently used commands and controls.
developer.apple.com
https://developer.apple.com/documentation/SwiftUI/Toolbars
Toolbars | Apple Developer Documentation
Provide immediate access to frequently used commands and controls.
developer.apple.com
이건 개발문서!
내가 지금 개발하는 곳에서는 이렇게 사용했다.
.toolbar {
Button("수정") {
isPresentingEditView = true
}
.tint(.main)
}
사용자가 바로 컨트롤러 할 수 있도록 동작해야하는 버튼 등을 배치한다.
문서보면 정말 잘 나와있고, style 적용 방법도 있다.
.sheet
sheet(isPresented:onDismiss:content:)
sheet 에는 이렇게 3가지 요소가 들어간다.
바인딩 할 Binding<Bool> 값이 true 가 되면 sheet가 열리고, 닫으면 false 상태가 된다.
그래서 onDismiss 로 닫힌 상태가 될 때 바인딩 bool 값이 false 가 된다.
이 시점!! 궁금하지않은감?ㅎㅎ
이 바인딩 값 변경은 onDismiss 호출 전에 일어난다.
onDismiss 클로저 안에서 isPresented 값을 확인하면 이미 false로 변경되게 된다.
어? 닫아야겠다? -> binding 값 false 로 -> 닫기 완료!
sheet(isPresented:onDismiss:content:) | Apple Developer Documentation
Presents a sheet when a binding to a Boolean value that you provide is true.
developer.apple.com
Sheet의 높이 설정방법(자주 쓰게 될 것 같음)
.sheet(isPresented: $isPresented) {
SheetView()
.presentationDetents([.medium, .large])
}
이건 GPT에게 물어본 것.. 구현은 안해봤다. 언젠가 해보자ㅏ
Solution (해결 결과)
- sheet 를 이제 곧 써야하는데, 이때 한번 해봐야겠다.
- toolbar 하면 그냥 상단 우측 버튼 이정도 생각이였는데, 여러 멀티플래폼에선 유용할 수 있겠다는 생각이 들었다.
- 그리고 HIG!! 진짜 문서 잘되어있다... ...그치만.... 디자인은 너무 힘들다...ㅠㅠ
Reflection (회고)
오늘 배운 것:
toobar, sheet
'iOS > App' 카테고리의 다른 글
Scrumdinger 분석하기 03 /scrum/DetailView.swift (0) | 2025.04.28 |
---|---|
Scrumdinger 분석하기 02-1. /scrum/ScrumsView.swift (0) | 2025.04.15 |
Scrumdinger 분석하기 01. /scrum/CardView.swift (0) | 2025.04.14 |
Scrumdinger 개발 10 : Recording audio (0) | 2025.04.10 |
Scrumdinger 개발 09 : Drawing the timer view (0) | 2025.04.09 |