일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Protocol
- 컴퓨터그래픽스
- 백준
- TCA
- 위젯킷
- Swift
- cs
- widget
- 문법
- 웹
- spritekit
- 멋사
- 멋쟁이사자처럼
- 리액트
- 스위프트
- 스유
- composable architecture
- dispatchqueue
- c++
- widgetkit
- 후기
- 영남대
- 운영체제
- uikit
- 대외활동
- 알고리즘
- 네트워크
- swift concurrency
- SwiftUI
- 1일1알골
- Today
- Total
맛동산이
SwiftUI) 2023 WWDC, 위젯에 버튼액션을 넣는방법(Widget with interactive button) 본문
SwiftUI) 2023 WWDC, 위젯에 버튼액션을 넣는방법(Widget with interactive button)
진ddang 2024. 5. 13. 09:46위젯 동작과, 내용에 관해서는 이전 글을 참고하시길 바랍니다.
간단하게 설명하자면 위젯에서는
- Entry
- Provider
- Widget
- View
로 크게 나누게 되며, Provider가 Entry를 Timeline에 맞춰서 새로 생성하여 배열에 담고, 해당 타임라인 시간에 맞춰서 entry배열에 담긴 화면을 그리는것이 위젯의 기본 동작이다.
iOS 17버전 이전에서는 위젯에서는 위젯을 눌러서 앱을 실행하는 동작 이외에는 어떠한 버튼 동작이 불가능했다.
하지만 iOS17 이상에서는 위젯에 버튼액션이 가능한데 이를 정리해보고자 한다.
AppIntent
2023 button 을 이해하기 위해서는 우선 appIntent라는것에 대해서 이해해야한다.
간략하게 말하자면, appIntent는 시스템에서 앱의 기능이나 컨텐츠를 사용할수 있도록 하는 프레임 워크이다.
appIntent를 생성하면 shortcut이 생성되고 이를 통해서 앱 외부에서 앱 내부의 기능이 실행되도록 하는 프레임워크라고 생각하면 쉽다.
Interactive Button생성하는 법(iOS 17 이상만)
iOS 17버전이상에서는 Button(_ label: , intent: )과 Toggle(intent: )이 추가되었다.
여기에서 intent는 AppIntent를 추가하게 되고, 이를 통해서 위젯에서 appIntent를 통해서 앱 내부의 동작이 실행되도록 한다.
button intent의 특징은 다음과 같다.
- intent 내부의 perform 함수를 통해서 기능을 실행시킨다.
- perform이 끝이나면 즉시 WidgetCenter에서 reloadTimeline을 실행한다. 즉 그 즉시 타임라인이 새로 생긴다.
- 자동으로 제공되는 애니메이션이 있다.
사용하는 방법의 스탭은 다음과 같다.
1. AppIntent 정의하기
@available(iOSApplicationExtension 16, *)
struct TestIntent: AppIntent {
struct var title: LocalizedStringResource = "앱 인텐트의 이름"
struct var description = IntentDescription("앱 인텐트의 설명")
func perform() async throws -> some IntentResult {
somefunction()
return .result()
}
위에서 설명을 하자면, title과 description은 단축어에서의 설명이다.
실제로 빌드한 파일에서 생성된 단축어의 경우 이렇게 title과 description이 들어가게 된다.
이처럼 내가 버튼에 동작하고 싶은 기능을 추가하고, appIntent를 생성한다.
!!!! 중요한점은 해당 intent를 생성할때 위젯과 앱의 데이터 연동이 필요하기 때문에 타겟을 둘다 추가해줘야 한다.
요 타겟 맴버 까먹지 말고 설정해주자!
2. Button에 추가하기
Button(intent: someIntent()) {
Text("this is Button")
}
간단하다.
그냥 Button(intent: someIntent()) 해주면 끝.
button Intent에서 애니메이션이 동작하는 원리
- 기존의 SwiftUI - State가 변경되는 부분에 대해서 변경
- widget - entity가 변경되는것을 entry끼리 비교해서 변경
'앱 > SwiftUI' 카테고리의 다른 글
SwiftUI) TCA 비동기처리, TaskResult타입 (0) | 2024.08.08 |
---|---|
SwiftUI) TCA 장점과 기본 개념 (0) | 2024.08.08 |
SwiftUI) 2023 WWDC, 위젯에 버튼액션을 넣는방법(Widget with interactive button) (0) | 2024.02.25 |
SpriteKit) PhysicsBody 물체에 따라서 프레임주기 [SwiftUI] (0) | 2023.08.28 |
SpriteKit) 코어모션을 이용한 중력 변화주기 [SwiftUI] (0) | 2023.08.28 |