Swift Cahrts
새로운 프레임워크 ⭐️
state-driven charts
- chart도 View의 일부
- list나 table처럼 데이터를 제공한 다음 해당 데이터로 차트 콘텐츠를 작성하여 선언
localization
, 다크 모드 및 dynamic type
자동 지원, 모든 플랫폼에서 작동
Navigation and windows
Stacks, Split Views, Scenes 세 가지 패턴에 대규모 업데이트 제공
Stack
push-pop 스타일의 네비게이션을 지원하기 위해 NavigationStack
이라는 컨테이너 뷰를 도입
루트 콘텐츠를 래핑하고, navifationLink
와 navigationTitle()
같은 기존 API와도 잘 작동
NEW
navigationDestination()
- navigation의 대상을 특정 데이터 타입과 연결
NavigationLink(value: ) { ... }
- destination으로 목적지 대신 나타내는 값을 사용
데이터로 스택 구동 -> 현재 네비게이션 경로를 명시적으로 나타낼 수 있음
뷰가 스택에 푸시되면 배열에 쌓아두고 버튼 동작을 통해 첫 시작으로 한 번에 돌아갈 수 있음
Split Views
NavigationSplitView 🆕
다중 열 탐색을 위한 컨테이너
- 2열, 3열 레이아웃을 선언 가능
- NavigationLink와 잘 작동
- 링크 값을 사용해 list의 선택을 유도
- 더 작은 크기의 클래스나 장치에서 자동으로 스택으로 축소되어 다중 플랫폼 앱을 빌드하기 좋음
- NavigationStack과 함께 작동하도록 설계되어 보다 복잡한 네비게이션 구조를 구축하기 위해 구성될 수 있음
Scenes
현재 = WindowGroup
- 앱의 기본 인터페이스를 구축하는 좋은 방법
- 앱의 데이터에 대한 다양한 관점을 위해 여러 window를 생성할 수 있음
Window 🆕
앱에 대해 하나의 고유한 window를 선언
Environment를 사용해 프로그래밍 방식으로 SwiftUI 관리 window를 열 수 있음
- 기본 크기, 위치, 크기 조정 가능성 등에 대한 수정자 등 window 커스텀 기능을 추가
멀티 플랫폼에선 작은 창에 대한 디자인 지원이 필요
- presentationDetents로 두 가지 다른 크기를 구성
Xcode 다중 플랫폼 대상으로 플랫폼 간 변환이 간단
하나의 대상을 여러 플랫폼에 배포 가능
메뉴 표시줄에 관심을 줄 수 있다!
Ventura os를 사용하면 SwiftUI에서 MenuBarExtras 빌드 가능
Advanced controls
대화형 콘첸츠를 구축하기 위해 모든 API에서 다양한 개선 사항을 제공
mac OS에서 새로운 그룹인 formStyle
을 사용해 디자인을 활성화할 수 있음
새로운 컨트롤을 빌드하거나 일부 read 전용 정보를 표시하는 데 사용할 수 있는 LabeledContent
뷰를 사용해 쉽게 정렬 가능
기본 스타일을 텍스트에 적용하는 것이 더 수월해짐
동일한 코드를 iOS와 공유하기도 가능, iPad도 물론
Controls
TextField
axis
- 세로로 확장되도록 구성 가능
lineLimit
로 지정된 경우 줄 높이만큼 제한
-> 최소 공간 지원, 콘텐츠가 상한을 초과하면 스크롤하는 고급 동작도 지원
MultiDatePicker
Mixed-State Control
DisclosureGroup
- 여러 Toggle 그룹을 단일 Toggle로 축소 가능
- 내부 Toggle은 각각 단일 Binding을 사용하고, 집계 Toggle은 값이 모두 일치하지 않는 경우
mixed-state
를 나타내는 모든 Binding 컬렉션을 사용
- Picker도 동일하게 작동
--- iOS ---
- 해시태그를 선택하기 위한 버튼 스타일 Toggle 제공
toggleStyle(.button)
buttonStyle(.bordered)
- 테두리가 있는 버튼 스타일을 추가하면 토글을 구분하는데 도움
- Button Style은 Toggle, Menu, Picker 등 버튼 모양을 지원하는 모든 컨트롤에 적용됨
Stepper
Stepper(..., format: .nember)
- 해당 값의 형식을 제공 가능
- Mac OS에서는 편집 가능한 Stepepr 사용 가능
- 이제 watchOS에서도 Stepper 사용 가능
Accessibility Quick Action
- watch에서 손을 꽉 쥐는 동작
- 빠른 작업은 버튼을 사용하는 다른 UI 작업과 코드 공유 가능
Tables
Table
- 이제 iPadOS에서도 Table 지원
- 플랫폼 간 코드를 쉽게 공유 가능
- 작은 화면에서는 적절하게 렌더링되어 여러 열이 있어도 기본 열만 표시
- iPadOS에서는 개선된 ToolBar 디자인이 추가되어 세련미를 더할 수 있음
- 일부 toolbar item은 사용자화를 허용하지 않음. 사용자 지정 가능한 작업은 toolbar 중앙에 표시되거나 오버플로 메뉴에 표시되는 secondaryAction toolbar로 구성됨
Search
- 기본적으로 searchable 수정자로 기본 검색을 지원
- search field에서 토근화된 입력과 제안을 지원해 구조화된 검색 쿼리 구축 가능
Sharing
Photos
PhotoPicker
- 사진 및 비디오 선택을 위한 다중 플랫폼 및 개인 정보 보호 API
- 앱의 어느 위치나 배치 가능
- 활성화 시 사용자 라이브러리에서 사진(비디오)를 선택할 수 있는 표준 사진 선택 UI 제공
- 콘텐츠 유형 필터링, 선호 사진 인코딩과 같은 추가 구성 옵션 제공
Sharing
- 각 플랫폼에는 앱의 콘텐츠를 공유할 수 있는 표준 인터페이스가 존재
- watchOS 9부터 watch 내에서 공유 시트 표시 가능
ShareLink
- 공유할 콘텐츠(item)와 공유 시트에서 사용할 미리보기(preview)만 작성하면 공유 아이콘 버튼이 자동으로 생성
- 메뉴 및 플랫폼과 같이 적용되는 상황에 맞게 조정
Transferable
- PhotoPicker, ShareLink 등 응용 프로그램 간에 전송되는 방식을 설명하는 Transferale 프로토콜을 활용
- 드래그 앤 드롭과 같은 기능을 강화 - dropDestination API
- String, Data, URL, Image 등 표준 타입은 이미 Transferable을 준수
- 사용자 정의 타입에도 Transferable 구현 가능
Graphics and layout
Shape Styles
.blue.fradient
- 그라데이션 효과
shadow()
- 그림자 효과
SF Symbol과 ShapeStyle 확장 기능을 상ㅇ하면 멋진 아이콘을 만들 수 있다 👍
Preview
- 동시에 여러 구성에서 뷰를 볼 수 있는 편리한 방법
- Xcode 14에서는 구성 코드를 작성하지 않고도 여러 모양, 크기, 방향으로 미리보기 가능
Animation
- Text는 weight, style 및 layout에서 아름다운 애니메이션 가능
Layout
Grid
- 2차원 그리드로 정렬하는 새로운 컨테이너 뷰
- 하위 뷰를 미리 측정하여 여러 column에 걸친 셀을 활성화하고 자동 정렬을 활성화
- Grid, GridRow 및 gridCellColumns을 이용해 그리드를 점진적으로 구축
Layout
- Stack 및 Grid를 구현해 자신만의 Layout을 구축 가능
- Layout 프로토콜을 이용하면 뷰 계층 구조의 특정 요구 사항에 맞는 모든 종류의 레이아웃을 구축 가능
WWDC - What's new in SwiftUI