SwiftUI 56

Swift withTaskCancellationHandler

Swift withTaskCancellationHandler withTaskCancellationHandler란?Task가 cancel 되었을 때 동작을 정의할 수 있음.throw 던지면 catch에서 잡는다고 생각하면 편함.(중요) Task가 cancel 된다고 작업이 즉시 중단되는건 아님. 작업 내에서 취소 상태를 확인하고 이에 따른 핸들링이 필요. 예제 코드 및 영상샘플 예제 설명performTask(): 1부터 10까지 1초마다 반복Task가 cancel 되는 조건버튼을 클릭해 다음 뷰로 이동했을 때3초가 지났을 때(참고) task modifier는 (onAppear + Task)와 동일(주의) task에서 해당 코드 형태로 작성할 시 뷰가 사라지더라도 @State로 선언되 Task는 사라지지 않..

SwiftUI DynamicProperty

SwiftUI DynamicProperty 뷰의 외부 속성을 업데이트하는 저장 프로퍼티에대한 인터페이스   view의 body를 다시 계산(recomputing)하기 전에 해당 속성값을 제공  내부적으로 update() 메소드에 의해 기본 값을 업데이트.이 메소드는 필수이며 기본 구현이 제공됨. 이를 통해 저장 프로퍼티를 새로운 값으로 갱신.일반적으로 SwiftUI에서 @State와 같은 프로퍼티 래퍼가 사용될 때 뷰의 상태가 변하면 자동으로 호출되어 뷰의 상태를 최신으로 유지하는데 사용. 예제내용을 FileManager에 실시간으로 저장하는 예제.@AppStroage와 동일한 기능.@propertyWrapperstruct Document: DynamicProperty { @State private..

[WWDC24] UI 애니메이션 및 전환 효과 향상하기

[WWDC24] UI 애니메이션 및 전환 효과 향상하기 Intro- Transitions   - 화면 전환 및 프레젠테이션을 위한 새로운 고급 전환 방법 소개- SwiftUI animation   - SwiftUI animation과 UIKit 및 AppKit 간의 통합- Animating representables   - Representable을 통해 SwiftUI 애니메이션과 연결하는 방법- Gesture-driven animations   - 마지막으로 연속적인 제스처가 있을 때 UIView 및 NSView 애니메이션  Transitions SwiftUI에서 화면전환 새로운 API1. navigationTransitinStyle 추가2. matchedTransitionSource 추가 naviga..

apple/WWDC 2024.08.05

[WWDC24] SwiftUI 컨테이너 쉽게 이해하기

[WWDC24] SwiftUI 컨테이너 쉽게 이해하기 What's New- ForEach(subviewsOf: )- Group(subviewsOf: )- Sections(subviewsOf: )- ContainerValues- @Entry Intro- Composition- Sections- Customization Composition @ViewBuilder를 사용할 경우 기본적으로 초기화 프로그램이 후행 클로저에 의해 동작.  새로운 API를 통해 업데이트 가능. 해당 API는 단일 뷰를 입력 값으로 받음.그리고 각 하위 뷰를 후행 뷰 빌더로 전달해 다른 종류의 뷰를 반환할 수 있도록 함.  이를 활용하면 UI를 좌측에서 우측처럼 사용 가능함.이는 엄청난 개선이지만 어떻게 동작하는지 제대로 이해하는게..

apple/WWDC 2024.08.02

[iOS] infinite carousel DiffableDataSource + CompositionalLayout

[iOS] infinite carousel DiffableDataSource + CompositionalLayout UIKit에서 DiffableDataSource과 compositonalLayout을 사용하여 구현해보자. 전체 소스코드와 해당 코드에 대한 주석을 포스팅 제일 하단에 전부 넣어두었음. 예제 영상 무한히 회전하는 스크롤 뷰에 대한 구현 아이디어는 이미 많이 존재하나, 해당 포스팅에서는 diffableDataSource의 특성에 맞게끔 적용 (구현 방식) [앞에 붙는 id만 다른 원본] + [원본] + [뒤에 붙는 id만 다른 원본]을 먼저 구성한 후 한번에 apply diffable의 경우에는 데이터가 변경되었을 때, snapshot을 수정하는게 아닌 다시 찍음. 해당 부분은 iOS 13,..

[SwiftUI] NavigationLink 화살표 없애기

[SwiftUI] NavigationLink 화살표 없애기 SwiftUI에서 NavigationLink를 사용하면 기본적인 화살표가 생긴다. 해당 포스팅의 방법은 궁극적으로 화살표를 없애는게 아니고, ZStack과 opacity를 활용한 원하는 UI를 그려내는 방법이다. import SwiftUI struct ContentView: View { var body: some View { ZStack(alignment: .leading) { NavigationLink { // destination View } label: { EmptyView() }.opacity(0) Text("내 아이템") } } } 아래 이미지처럼 사용할 수 있다.

SwiftUI keyboard 이벤트 감지하기

SwiftUI keyboard 이벤트 감지하기앱 개발에 있어서 키보드 상태에 따라서 뷰의 다른 컴포넌트들의 높이가 조정되는 등 키보드와 관련해서는 꽤나 까다로움 UIKit을 사용한다면  - iOS 15 이상: keyboardLayoutGuide를 활용하여 레이아웃을 잡기 - iOS 14 이하: 키보드의 상태에 따라 키보드의 높이를 계산해서 뷰의 위치를 조정view.keyboardLayoutGuide SwiftUI 사용 - iOS 15 이상: @FocusState 활용 - iOS 14 이하: NotificationCenter와 Combine을 활용  샘플코드 키보드 상태를 읽을 수 있도록 아래 코드를 작성protocol KeyboardReadable { var keyboardPublisher: Any..

iOS SwiftData in UIKit

iOS SwiftData in UIKit연관 포스팅[iOS CoreData 간단한 CRUD](https://rldd.tistory.com/587)[iOS SwiftData in UIKit](https://rldd.tistory.com/588)[iOS CoreData 이론](https://rldd.tistory.com/586)[iOS CoreData Relationships](https://rldd.tistory.com/661) 이번에는 SwiftData를 UIKit에서 사용해보자!CoreData를 학습하기 전에는 SwiftData가 진짜 어려웠는데, 지금은 훨씬 배우기 쉽다. SwiftData를 사용하면 CoreData와 개념적으로 부합하고 있어서 학습하는데 더 쉽게 느껴졌다.또한 SwiftData가 가..

iOS CoreData 간단한 CRUD

iOS CoreData 간단한 CRUD 가장 기초적으로 CRUD 수행해보자 연관 포스팅[iOS CoreData 간단한 CRUD](https://rldd.tistory.com/587)[iOS SwiftData in UIKit](https://rldd.tistory.com/588)[iOS CoreData 이론](https://rldd.tistory.com/586)[iOS CoreData Relationships](https://rldd.tistory.com/661) Core Data를 사용하기 위한 사전준비- 프로젝트 생성시이렇게 생성하면 AppDelegate와 SceneDelegate에 기본적으로 Core Data를 위한 코드가 추가됩니다.먼저 SceneDelegate에서는 백그라운드로 넘어갔을때 현재 컨..