일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- widget
- dispatchqueue
- 1일1알골
- 멋쟁이사자처럼
- 후기
- TCA
- 문법
- SwiftUI
- 대외활동
- 컴퓨터그래픽스
- 스위프트
- 리액트
- Swift
- 영남대
- 스유
- 백준
- spritekit
- cs
- uikit
- composable architecture
- c++
- 네트워크
- 웹
- 알고리즘
- swift concurrency
- Protocol
- 멋사
- 위젯킷
- widgetkit
- 운영체제
- Today
- Total
목록앱/SwiftUI (32)
맛동산이
위젯 동작과, 내용에 관해서는 이전 글을 참고하시길 바랍니다. 간단하게 설명하자면 위젯에서는 Entry Provider Widget View 로 크게 나누게 되며, Provider가 Entry를 Timeline에 맞춰서 새로 생성하여 배열에 담고, 해당 타임라인 시간에 맞춰서 entry배열에 담긴 화면을 그리는것이 위젯의 기본 동작이다. iOS 17버전 이전에서는 위젯에서는 위젯을 눌러서 앱을 실행하는 동작 이외에는 어떠한 버튼 동작이 불가능했다. 하지만 iOS17 이상에서는 위젯에 버튼액션이 가능한데 이를 정리해보고자 한다. AppIntent 2023 button 을 이해하기 위해서는 우선 appIntent라는것에 대해서 이해해야한다. 간략하게 말하자면, appIntent는 시스템에서 앱의 기능이나 컨..
기본적으로 physicsBody는 쉐입을 다양하게 줄수있지만, 우리는 보통 해당 물체의 라인에 맞게 physicsbody를 주어야 한다. 그렇지 않으면 맞지도 않았는데 마치 보호막이 존재하는 것처럼 튕겨나갈지도 모르기 때문이다. 해당 부분에 대해서 공식도큐먼트에는 다음과 같이 나타나있다. 저렇게 대충 만들지 말고 쉐입으 딱 맞게 하는방법! let sprite = SKSpriteNode(imageNamed: "Spaceship") sprite.physicsBody = SKPhysicsBody(texture: sprite.texture!, size: sprite.texture!.size())
코어모션은 장치의 가속도계와 자이로스코프, 사용 가능한 경우 보수계, 자력계 및 기압계가 포함한 데이터를 가지고 있는 프레임워크이다. 해당 프레임워크를 가지고 중력센서를 통해서 SpriteKit의 화면에 중력을 작용시켜보자! PhysicsWorld 모든 scene은 자동적으로 물리현상을 구현하기 위해서 physicsWorld를 생성하며, physicsWorld는 SKScene위에 잇는 모든 노드들의 physics 프로퍼티에 접근할수 있다. 따라서 우리는 SpriteKit의 scene의 physicsWorld의 gravity를 줄 예정이다. 중력을 바꾸기 위해서는 중력을 바꾸는 값을 가져와야 하는데 해당 값을 coreMotion으로 기기의 기울기를 통해서 가져올수 있다. CoreMotion을 통해서 기기의..
1. 프로젝트에서 위젯 익스텐션을 만들어준다. 2. live Activity를 확인한다. 이거하고 나면 무슨 알람창이 뜨는데 그냥 확인 하면 됩니다. 3. 위젯이 생성됨 이렇게 프로젝트 좌측에 Widget이라고 생성이 된다. 4. 기존 프로젝트에서 쓴 extension과 같은것들을 사용할때 target을 추가해줘야한다. 이거설정 빼놓지 말고 쓰시길!
위젯에서 가장 중요한 3요소는 다음과 같다. Widget Configuration Provider EntryView Widget Configuration configuration과 관련된 속성값들 위젯 편집하기에 들어갔을때 생성되는 위젯추가 창, 혹은 위젯의 편집과 관련된 정보를 가진 객체가 바로 WidgetConfiguration이다. configuration 파라미터 kind 위젯의 identifier(아무거나 지정해주면 됨, 보편적으로 bundle id ) intent 유저가 구성할수 있는 속성 (static은 없음) provider 위젯의 뷰를 업데이트할 타이밍을 알려주는 객체 content 위젯에 보여줄 뷰 Configuration 종류 IntentConfigurationt예 ) to-do li..
위젯의 주요 3요소는 다음과 같다. 1. configuration 2. provider 3. entryView Provider bookmark 이 아티클을 읽어보면 이해가 갈수 있는데, widget의 경우에는 계속해서 활성상태로 가있는것이 아니다. 즉 메모리에 항상올라와있는것이 아니며, 반면 계속해서 업데이트 되어야 하는데 이때 사용하는 방법이 TimeLineProvider와 TimeLine이다. 즉 위젯이 계속해서 로드되어 있다면, 시스템 리소스와 네트워킹 그리고 베터리 소모가 크기 때문에 이를 막기 위해서 요청하는 업데이트의 빈도와 횟수를 제한하기 위한 객체이다. Timeline 타임라인은 기본적으로 위젯이 언제 업데이트 될것인지에 대한 정보이다. 앞서 말했듯 위젯은 항상 업데이트가 자동으로 되는것이..
EntryView EntryView가 실제로 유저에게 보여지는 뷰 이다. entryView는 기존의 뷰와 다르게 찍어낸 데이터를 받아오는것이기 때문에 내부에서 데이터를 변경하는것이 불가능하다. 따라서 entryView에 데이터를 넣어주는 방법은 Provider를 통해서 넣어주는 방법이다. 데이터를 넣어주는 방식은 다음과 같다. 1. TimelineEntry 데이터 정해주기 기존의 우리가 넣어줄 데이터를 TimelineEntry라는 객체에 넣어준다. 해당 객체는 기본 프로젝트를 만들면 있으며, 이름은 자유롭게 변경 intentConfiguration이라면, configuration이 있을것이며 그렇지 않다면 없을것이다. 2. Entries에 넣어줄때 해당 데이터 주입하기 widget은 이전 포스터에서 말했..
앱에서 위젯으로 데이터를 보내줘야할 경우가 당연하게 생긴다. (그냥 하드코딩 하고싶지는 않자나?) 다음과 같은 방법을 통해서 데이터를 보내줄수 있다. 1. App Group 추가해주기 우리의 메인 앱의 Target으로 가게 되면 거기에서 Signing & Capabilityies에서 all 왼쪽에 있는 + Capability를 누르면 appGroups를 추가할수 있다. 해당 방법을 통해서 위젯과 앱 둘다 appgroups를 추가 하고 동일한 groupId로 설정해준다. app Groups란? 동일한 팀이 개발한 앱 사이의 공유 컨테이너를 액세스 가능하도록 하는 그룹을 생성하는것이다. 이를 통해 프로세스간의 통신을 할수 있도록 한다. $(TeamIdentifierPrefix).com.example.mygr..
위젯은 직접적인 데이터 변경을 알아차려도 이전포스트에서 말했듯, 스스로는 변경할수 없다. 이를 연동된 앱에서 명시적으로 알려줘야한다. WidgetCenter 위의 명시적으로 알려주기 위한 객체가 바로 WidgetCenter이다. 우선적으로 위젯 센터는 다음과 같은 프로퍼티를 가지고 있다. kind : String family : widget family configuration : intent configuration 옵셔널 kind는 이전에 설명했던, 고유아이디. family는 supportedFamily에 넣어주는 위젯의 크기를 알려주는 사이즈 configuration은 intent가 있으면 존재하는 configuration이다. 앱데이터 변경을 통해 위젯 변경하기 앱 내부의 데이터 변경을 timel..