WWDC 23 > Explore SwiftUI animation 를 보다가 iOS 17에서 animation(_:body:) 등장을 알게 되었다. 기존에 animation(_:value:) 잘썼는데 왜 저 인터페이스가 추가되었을까? WWDC 에 나오는 내용으로 살펴보자. (참고로 이 글 을 먼저 읽고 오길 추천!) [1] 문제 이런 코드를 짰는데, pet 과 상관없는 다른 곳에서도 이 코드를 재사용하고 싶다고 해보자 그래서 이렇게 generic 하게 바꿔줬다. 그럼 어떤 위험이 있을까? 전자처럼 전체 계층구조를 제어할 수 있는 상황이고 leaf component 라면 원하는대로 애니메이션이 잘 작동한다. 하지만 content가 non-leaf component 라면 (== 하위 계층을 가지고 있는 뷰라면..
웃는 입꼬리(?)를 그리고 싶어서 Curved Path 를 그려본 기록 (with Animation) [1] Rectangle Path 그리기 (연습) 우선 가장 만만한 Rectangle 로 연습 먼저 해보겠습니다. rounded rectangle 을 Path 로 그려보면 다음과 같습니다. 이렇게 라인을 그리고 path 를 닫아서 네모를 완성시켜주는 코드입니다. 그리고 Shape 의 trim(from:to:) 모디파이어를 사용해서 애니메이션을 줄 수 있습니다. 예를들어 trim(from:0, to: 0.5) - 처음부터 50%까지만 그린다. trim(from: 0.5, to: 1) - 50%부터 끝까지 그린다. from을 0으로 고정시키고 to 를 0 ~ 1 사이로 바꾸면서 애니메이션을 주면 됩니다. 코..
[SwiftUI] @Observable 매크로 (1) 에서 이어집니다. [ 요약 ] # 1. 예전에 뷰에서 썼던 프로퍼티 래퍼 @State, @Binding, @ObservedObject, @StateObject, @EnvironmentObject, @Enviroment iOS 17+ 부터는 4개만 쓰면 됨 @State, @Binding, @Bindable (NEW), @Enviroment # 2. ObservableObject 가 Observale 매크로로 대체되고 뷰에서 프로퍼티 래퍼로 쓰던 것은 다음과 같이 매핑됨 ✓ @ObservedObject ----> 안써도 됨 ㄴ 하지만 텍스트 필드처럼 Binding을 넘겨줘야하는 경우는 @Bindable ✓ @StateObject ----> @State ✓..
Swift 5.9 부터 Observable macro 를 사용할 수 있습니다. ✓ WWDC 23 > Discover Observation in SwiftUI ✓ Managing model data in your app / Migrating from the Observable Object protocol to the Observable macro ✓ Observation ✓ 구현 코드 WWDC 만 보면 채워지지 않는 구멍이 정말 많습니다 .. 🙄 문서를 같이 보길 추천드립니다. 또한 Xcode 15 beta 5 에서 @Observable 을 사용하면 컴파일 에러가 납니다 저는 이거 보고 Xcode 앱 이름에 공백제거하고 컴파일 성공했음! https://developer.apple.com/forums/thr..
GridItem 을 만들 때 GridItem.Size 를 세팅해야한다. Size 옵션 중, 자주 헷갈리는 adaptive와 flexible 을 정리! public enum Size { /// A single item with the specified fixed size. case fixed(CGFloat) /// A single flexible item. /// /// The size of this item is the size of the grid with spacing and /// inflexible items removed, divided by the number of flexible items, /// clamped to the provided bounds. case flexible(minimu..
[1] task modifier - task(priority:_:) // Adds an asynchronous task to perform before this view appears. - task(id:priority:_:) // Adds a task to perform before this view appears or when a specified value changes. [2] 필요성 task modifier 가 나오기 전에는 뷰가 disappear 될 때 진행 중인 task 를 cancel 해주기 위해 어딘가에 (아래 예제는 뷰인데 보통 뷰모델) task 를 들고 있고 onDisappear 에서 cancel을 해줘야했음. struct SampleView: View { var body: some ..
Processing URL Session Data Task Results with Combine 에 나오는 내용입니다. [ 목표 ] Combine으로 네트워크 쪽 코드를 작성하는 것은 크게 두가지 절차를 거칩니다. 1. Data Task Publisher 를 만든다. 2. 비동기 연산자 (asynchronous operator) 들을 체이닝하여 data를 받고 처리한다. 이를 알아봅니다. 또한 네트워크 쪽 코드작성할 때 필요한 에러 핸들링, 스케쥴링, share 도 알아봅니다! [1] Data Task Publisher 만들기 URLSession 은 Combine Publisher 인 URLSession.DataTaskPublisher 를 제공합니다. func dataTaskPublisher(for: U..
SwiftUI Tutorials > Animating Views and Transitions 에 나오는 내용을 기반으로 하고 있습니다. 목표 SwiftUI가 제공하는 effect 들을 써보고 (이 글에서는 rotationEffect, scaleEffect 사용) 여러 effect를 조합하여 애니메이션 시키는 법을 알아봅니다. [1] rotationEffect struct DetailButtonImage: View { var body: some View { Image(systemName: "chevron.right") .frame(width: 50, height: 50) .background( Circle().foregroundColor(.white) // Shape의 fill을 써도 됨. ) .shado..
[SwiftUI] re-rendering, re-draw 추측 에서 SwiftUI가 내부적으로 리렌더링을 어떻게 결정하는 지 추측해보았는데요 리렌더링을 커스터마이징 (?) 할 수 있는 방법도 있습니다. # 1. SwiftUI 는 다시 안그리는데, 나는 다시 그리고 싶은 경우 뷰는 extract subview를 하면 별도의 identity를 부여받아, 부모 뷰와 같이 리렌더링이 안됩니다. 부모의 body가 재호출될 때 extracted 한 서브뷰를 항상 같이 다시 그리고 싶으면 id를 활용합니다. [ 기본 동작 ] ContentView의 body가 호출될 때 NoMatterText는 다시 안그려짐 struct ContentView: View { @State private var isOn = true pri..
[ 인트로 ] SwiftUI는 state-driven, data-driven 방식으로 state 가 변하면 view 를 다시 그립니다 (body를 호출하여) 하지만 body를 재호출한다고 모든 것을 다시 그리는 것이 아니라 변경이 필요한 부분만 다시 렌더링 합니다. 그렇다면.. re-rendering 또는 re-draw를 결정하는 SwiftUI의 diff 판단 로직은 어떻게 될까요? (= body가 호출될 때 무엇을 다시 그리고, 무엇을 다시 안그릴 지 어떻게 결정할까요?) WWDC21 - Demystify SwiftUI 를 보면 identity, life time, dependencies 이 세가지 요인이 메인요소인 것 같습니다. 저는 이 중에서 identity 위주로 저의 re-rendering 추측..
- Total
- Today
- Yesterday
- METAL
- github actions
- Watch App for iOS App vs Watch App
- 장고 Custom Management Command
- 플러터 싱글톤
- Django Firebase Cloud Messaging
- flutter 앱 출시
- Flutter Text Gradient
- PencilKit
- Django Heroku Scheduler
- flutter build mode
- Flutter getter setter
- flutter deep link
- Python Type Hint
- Flutter Clipboard
- DRF APIException
- 플러터 얼럿
- ribs
- ipad multitasking
- 구글 Geocoding API
- cocoapod
- Sketch 누끼
- 장고 URL querystring
- Flutter Spacer
- flutter dynamic link
- Dart Factory
- Django FCM
- SerializerMethodField
- Flutter 로딩
- drf custom error
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |