-
Notifications
You must be signed in to change notification settings - Fork 0
SwiftUI
NOH. Hanyoung edited this page Oct 22, 2019
·
16 revisions
- drag gesture + geometry reader 같이 사용하기
- 버튼 영역 확장 시키기 어떻게 하나
- optional value 처리하기 - https://ericasadun.com/2019/06/20/swiftui-handling-optionals/
- a.map { $0 } 처럼 처리하는게 젤 편했음;
- Code로 쉽게 Custom View를 만들 수 있게 되었음.
- preview도 쉽게 볼 수 있음
- import SwiftUI 를 하고, View를 상속받아서 만들면 됨
- PreviewProvider를 상속받아서 만든 뷰를 프리뷰 할 수 있음
- 내용을 dyanmic 하게 로드해서 테스트도 할 수 있음
- 디바이스를 종류별로 미리 설정해서 프리뷰도 할 수 있음 (iphone 8, iphone xs 등 다른 타입 2가지를 동시에 로드 가능)
- 겁나 빠르다고 함.
- Autolayout 은 SwiftUI에서 사용하지 않음, flexible box layout system을 사용함
- 아직은 UITableView 같은건 SwiftUI로 완전 대체할 수 없음
- 색이 약간 다름. dark mode / light mode에 적합하게 알아서 컨트롤 됨
- UIKit / SwiftUI 섞어서 사용 가능함
- SwiftUI 는 기존 Xib / Storyboard / UIKit의 View만 대체하는게 아니라 앞에거 포함해서 ViewController까지 대체되는 것 같은 느낌
- 실제 내부에서는 controller 영역은 UIViewControllerRepresentable 같은걸로 대체되긴 함
- 근데 gesture 처리나 기존 로직 처리하던 부분 상당수가 binding 때문에 SwiftUI 내부로 들어오게 됨.
- SwiftUI 는 control code + view 가 합쳐지고, 작은 부분으로 쪼개서 사용할 수 있어서 코드가 더 단순해지는 듯
- SwiftUI Data Flow
-
SwiftUI WWDC 세션 모음
-
Introducing SwiftUI: Building Your First App
- 간단한 앱 만들면서 binding 이 왜 좋은지에 대해 (선언적 프로그래밍이 왜 좋은지) 설명
-
- 간단한 앱 만들면서 View 작성법, binding, Environment 사용, TabbedView 사용 등
- 추천 !
-
- UIViewControllerRepresentable / UIViewRepresentable 등 설명, 데이터 binding 관련 설명
- @ObjectBinding, @EnvironmentObject, @State 외에... @Environment, @Binding 이 있음.
-
Building Custom Views with SwiftUI
- 레이아웃 프로시져 - 뷰가 그려지는 순서를 step by step 으로 알려줌
- Parent 가 size 를 child 에 추천 -> child 가 스스로 사이즈를 정한다 -> parent 는 child 를 적당한 위치에 위치시킨다
- 복잡한(?) arc 이미지를 그리면서 애니메이션 처리까지 어떻게 하는지 알려줌
-
- 기존에는 MacOS:AppKit, iPad+iOS: UIKit, AppleTV: (TVUIKit or UIKit), AppleWatch: WatchKit 이었지만 이제 SwiftUI 하나로 간다
- 하나의 사이즈로 모든 플랫폼에 맞는 앱은 만들 수 없음, 대신 같은 기술, 코드를 이용할 수 있게 하자.
-
Writeonce,runanywhere, Learn once, apply anywhere <- SwiftUI 철학인 듯 - 하나의 앱을 만들지 말고, 여러개의 앱을 만든다.
- appleTV, macOS, iOS, appleWatch 개발 뷰 구성에 대해 알려줌
- Apple TV 에는 10걸음 경험을 중시, 뷰를 포커스 가능하게 만들어야 함
- iOS는 TabbedView 아래에 NavigationView가 있는데, tvOS는 NavigationView아래에 TabbedView가 있음.
-
- 추천! 꼭 읽어보자.
- 핵심은 정보의 분산 (복사되어서...)은 앱을 어렵게 만든다. binding 으로 복사되지 않게 하자.
- @State - binding 가능한 값
- @Binding - Read and write without ownership / derived from @State (하위 뷰에 값 전달/수정 가능하게 해주는)
- BindableObjectProtocol - class 나 struct 를 binding 할 수 있게 해줌
- @ObjectBinding - BindableObjectProtocol 을 binding 하는 것
- @EnviromentObject - static 한 값. 어디서든 접근 가능
-
- 사용자 인터페이스 접근성 - Label 을 이해하기, Action 하기, 순서와 그룹핑 하기. 를 잘 해야 함
- 접근성 - 간단하게는 시각 장애인도 쓸 수 있게 보이스 오버 해주는 것들 같은 것.
-