Apple/SwiftUI(7)
-
[ Widget ] 내 맘대로 뚝딱, 폰 화면에서 앱 위젯 구성하기
WidgetKit의 존재 목적은 무엇인가? WidgetKit은 단순히 Widget 기능만 관리하는 것이 아니라, watch 앱 화면 디스플레이를 구성하는 Complication, 폰 잠금화면에서 해제했을 때 나오는 제어 센터, 등을 관리하는 apple controls를 활용하려고 할 때 WidgetKit 라이브러리를 사용해야한다. 앱의 콘텐츠를 노출할 수 있는 범위- 홈, 잠금화면: Timeline 기반- Live Activity: Push / ActivityKit- 애플 와치 컴플리케이션 : Timeline + ClockKit 그치만 여기서 다뤄 볼 주제는 홈 화면에서 사용자의 편의를 위해 위젯을 추가해 사용해 보는 부분에 대해 언급해보려고 한다.폰 화면의 바탕 배경을 지그시 누르면, 편집 화면이..
2025.05.20 -
Widget 기본 설정해보기
Xcode 에서 Project 생성 시 - Multiplatform > App 선택하기, iOS 의 App 선택이 아니다. Process1. WeatherData.swift 파일에서 날씨 관련 Dummy Data(더미데이터 - 임시 데이터)와 TimelineEntry 타입 안에 설정될 날짜, 도시, 기온, 날씨 설명, 아이콘, 이미지들을 설정해준다. 2. ContentView.swift 파일에서 WeatherType 이라는 Hashable 타입의 구조체를 생성해준다. → NavigationLink 나 List 같은 SwiftUI 뷰를 사용시, 고유 비교가 필요한 경우를 위해 Hashable 채택→ Hashable 을 채택해야 NavigationStack dptj .navigationDestination(..
2025.04.05 -
@PropertyWrapper - ObservableObject, EnvironmentObject
이전에 살펴보았던, State 프로퍼티는 뷰의 상태를 저장하는 방법을 제공하며 해당 뷰에만 사용할 수 있다.즉, 하위뷰가 아니거나 State Binding 이 구현되어 있지 않은 다른 뷰는 접근할 수 없다. 상태 프로퍼티는 일시적인 것이어서 부모 뷰가 사라지면 그 상태도 사라진다.ObservableObjectObservable 객체는 여러 다른 뷰들이 외부에서 접근 할 수 있는 지속적인 데이터를 표현하기 위해 사용된다.→ 객체가 변경되기 전에 내보내는 publisher(게시자) 가 있는 객체 유형class Contact: ObservableObject { @Published var name: String @Published var age: Int init(name: String, age: Int) { ..
2023.11.12 -
Property Wrappers 에 대해 알아보자 - State, Binding ①
SwiftUI 에서 Property Wrapper들의 종류가 적지 않은 걸로 안다. 앞에는 주로 @ 표시를 붙이고 사용하는데, 그 종류를 알아보기 앞서 Property Wrapper 가 가지는 의미에 대해서 알아봐야겠다. Swift 내에서 프로퍼티가 가지는 속성과 역할을 보면, Properties - Access stored and computed values that are part of an instance or type. 저장되거나 계산되는 인스턴스 또는 타입의 일부인 value(값)에 액세스(접근) 한다. 그렇다면, 속성을 감싸서 사용할 때 감싼 걸 가지고 와서 사용할 것 같은 프로퍼티 래퍼 이 녀석은 Property Wrapper A property wrapper adds a layer of s..
2023.11.04 -
ViewBuilder 는 어떻게 만드는 걸까? - ②
앞서 ViewBuilder의 개념에서 하위 뷰 생성 클로저에 매개변수에 대한 속성으로 사용해 해당 클로저가 여러 하위 뷰를 제공할 수 있도록 해준다고 한다. 는 걸 알아봤다. 그런데 뷰빌더를 어떻게 만들어서 갖다쓰는 걸까?! custom container view 를 만들어서 레고 블록처럼 가져다 쓸수 있다고 해야할까.. 하위 뷰는 뷰 선언부를 작고 가볍게 재사용할 수 있는 블록으로 나누는 방법을 제공한다. 하위 뷰에는 한계가 있는 컨테이너 뷰의 콘텐트가 정적이기 때문에 하위 뷰가 레이아웃(Layout) 에 포함될 시점에 하위 뷰에 포함될 뷰를 동적으로 지정할 수 없다. 우선 백문이불여일타라고, 눈으로 보고, 코드부터 짜봤다. @ViewBuilder 를 생성하기 위한 조건. 1. 라는 제너릭 타입같은 놈..
2023.10.07 -
ViewBuilder 란 무엇일까? - ①
클로저에서 뷰를 구성하는 사용자 정의 매개변수 속성! @resultBuilder struct ViewBuilder ViewBuilder 를 하위 뷰 생성 클로저 매개 변수에 대한 매개변수 속성으로 사용하여 해당 클로저가 여러 하위 뷰를 제공할 수 있도록 해준다. 예를 들어, contextMenu 함수는 뷰 빌더를 통해 하나 이상의 뷰를 생성하는 클로저를 허용한다. NOTE 참고로,, contextMenu 는 watchOS 6.0 - 7.0 에서 deprecated(더 이상 사용되지 않음..) 되었따.. func contextMenu(@ViewBuilder menuItems: () -> MenuItems) -> some View where MenuItems : View Text("Turtle Rock") ..
2023.09.16