WWCD 24 > What’s new in Xcode 16 에서 소개된 preview 관련 API 두개..! [1] @Previewable - @Previewable 은 #Preview body 내에서 사용하는 매크로 (iOS 17+)- 이 매크로는 #Preview body 내에서 @State property 를 선언할 수 있게 해줌 (예전에는 dynamic property 를 들고 있는 뷰의 동작을 테스트하기 위해 별도의 wrapper view 를 만들고 @State property 를 선언했음) AS ISimport SwiftUIstruct SomeView: View { @Binding var text: String var body: some View { Te..
Layout 프로토콜을 채택해서 Custom Layout 을 주로 만들지만 (문서, 예제 - WheelLayout )이 글처럼 SizeLogger 를 만들 수도 있다. 좋은 아이디어! struct SizeLogger: Layout { let label: String func sizeThatFits(proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) -> CGSize { let result = subviews[0].sizeThatFits(proposal) print(label, proposal, result) return result } func placeSubview..
iOS 17 부터 scrollClipDisabled 모디파이어를 쓸 수 있다. ScrollView 는 기본적으로 contents 를 scrollView bounds 에 맞게 clip 하기 때문에ScrollView 안에 들어가는 뷰에 shadow 를 주면 짤리게 된다.그 때 이 모디파이어를 사용해서 shadow 를 안짤리게 할 수 있다. [ 문서에 나오는 예제 ] scrollClipDisabled > true (디폴트값) scrollClipDisabled > false [ 하위버전 ] 그럼 하위버전에서는 어떻게 shadow 가 안짤리게 할까 ? ScrollView 자체에 shadow 를 주면 된다. (동일하게 동작함) ScrollView(.horizontal) { ..
Timer 쓸 때, 편하게 썼던 autoconnect 는 ConnectablePublisher 의 메소드이다. ConnectablePublisher 에 대해 자세히 알아보자. [1] ConnectablePublisherConnectablePublisher 는 connection 을 명확히 지정할 수 있는 publisher 이다. 즉 connect 메소드를 직접 호출하기 전까지 값을 방출하지 않는다. 값이 방출되기 전에 추가적인 configuration 이나 setup 이 필요할 때,구독자들이 다 준비된 후 이벤트를 방출하고 싶을 때유용하다. autoconnect 는 connection , disconnection 을 자동으로 해주는 메소드이다. [2] ConnectablePublisher..
Preferences 는 서브뷰가 자신을 감싸는 컨테이너에게 configuration 정보를 알려줄 수 있는 방법이다. 많은 built-in modifier 에서 이 방식을 사용하고 있다. (ex. navigationTitle, colorScheme) 쉽게 말하면.. 뷰 하이어러키에서 하위 뷰가 상위뷰로 데이터를 간편하게 전달할 수 있는 방식이고앱의 전역적인 설정을 전달할 때 주로 사용한다. 예를들어 앱 설정 페이지의 깊숙한 곳에 앱 전체의 key color 를 세팅하는 뷰가 있다고 해보자 1) PreferenceKey 를 정의한다2) 하위뷰에서 preference(key:value:) 를 호출해서 preference 에 대한 value 를 세팅한다.3) 상위뷰는 해당 키를 알면, onPrefe..
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..
- Total
- Today
- Yesterday
- drf custom error
- Flutter Spacer
- Watch App for iOS App vs Watch App
- Flutter Text Gradient
- ribs
- flutter 앱 출시
- DRF APIException
- 플러터 얼럿
- ipad multitasking
- 장고 URL querystring
- SerializerMethodField
- cocoapod
- flutter deep link
- 구글 Geocoding API
- PencilKit
- Flutter Clipboard
- METAL
- Django Firebase Cloud Messaging
- github actions
- Flutter 로딩
- Python Type Hint
- Flutter getter setter
- flutter build mode
- 장고 Custom Management Command
- 플러터 싱글톤
- Sketch 누끼
- Django FCM
- Dart Factory
- flutter dynamic link
- Django Heroku Scheduler
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |