일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스위프트
- uikit
- cs
- TCA
- ReactorKit
- 멋쟁이사자처럼
- 웹
- widgetkit
- 운영체제
- swift concurrency
- Swift
- dispatchqueue
- 후기
- 대외활동
- 알고리즘
- 문법
- spritekit
- SwiftUI
- widget
- composable architecture
- 컴퓨터그래픽스
- Protocol
- 영남대
- 백준
- 네트워크
- c++
- 위젯킷
- 스유
- 리액트
- 멋사
- Today
- Total
목록SwiftUI (34)
맛동산이
위젯은 직접적인 데이터 변경을 알아차려도 이전포스트에서 말했듯, 스스로는 변경할수 없다. 이를 연동된 앱에서 명시적으로 알려줘야한다. WidgetCenter 위의 명시적으로 알려주기 위한 객체가 바로 WidgetCenter이다. 우선적으로 위젯 센터는 다음과 같은 프로퍼티를 가지고 있다. kind : String family : widget family configuration : intent configuration 옵셔널 kind는 이전에 설명했던, 고유아이디. family는 supportedFamily에 넣어주는 위젯의 크기를 알려주는 사이즈 configuration은 intent가 있으면 존재하는 configuration이다. 앱데이터 변경을 통해 위젯 변경하기 앱 내부의 데이터 변경을 timel..
Designated init()이란 지정 이니셜라이저이다. 우리가 class를 사용하면 모든 프로퍼티에 초기값을 할당해줘야 하고 초기화 할수있게 해준다. class SomeClass { var number: Int var name: String init(number: Int, name: String) { self.number = number self.name = name } } 하지만 이때 단 하나의 프로퍼티라도 초기화가 되지 않으면 에러를 발생시킨다. convenience init() 💡 convenience init은 왜쓰는가? 바로 init을 할때, 모든 프로퍼티에 초기값을 일일히 넣어주는 작업을 하지 않고, 초기값을 자동으로 넣어주기 위해서 사용한다. 따라서 convenience init은 기본적..
Apple Document에는 다음과 같이 스프라이트킷을 정의하고 있다. 하지만 게임을 만들기 위해서 라는 부분이 좀 많이 안와닿았는데, 다음과 같이 좀더 명확하게 설명해준다. 💡 SpriteKit은 도형을 그리거나, 글, 이미지 등을 2차원에서 다양한 애니메이션과 물리법칙을 적용하여 쉽게 게임과 같은 graphic-intensive app을 만들때 사용하는 프레임워크이다. Scene Spritekit에서 제공하는 컨텐츠를 보여주기 위해서는 스프라이트킷에서 제공하는 뷰에서 해당 컨텐츠를 그려야한다. 제공하는 뷰는 다음과 같다. SKView : 스프라이트킷의 컨텐츠만 보여줄때 사용하는 뷰 SKRender : Metal과 스프라이트킷 컨텐츠를 섞어서 보여줄때 사용하는 뷰 Metal이란? metal이란 app..
EnvironmentValue란SwiftUI 에서는 뷰를 구성하는데 있어서, 필요한 각종 환경 설정과 관련된 정보를 EnvironmentValue타입으로 저장한다. colorScheme, timeZone, locale, calendar, layoutDirection, sizeCategory, undoManager 등 다양한 속성을 가지고 있다. Environment란environment 어노테이션(@Environment) 은, 위의 EnvironmentValue를 프로퍼티로 가지고 있는, 구조체이다. 해당 Environment를 통해서 설정에 있는, 뷰의 환경 변수를 가져와서 사용할수 있게 된다. EnvironmentValue와 Environment의 상관관계즉, EnvironmentValue란, Env..
뷰를짜다 보면 modifier가 엄청 길어지거나 화면에 계속 반복되는 modifier를 사용하는 경우가 생긴다. 이러한 경우 custom modifier를 생성해서 사용하면 편하다.방법은 다음과 같다 . ViewModifier를 채택하는 구조체 생성 .modifier(modifier: _ )를 사용해서 적용 Uploaded by N2T

음악기능을 추가해보자! 1. 음원파일 추가하기드래그엔 드랍을 통해서 추가해줄수 있다. 2. AVFoundation 추가import AVFoundation 을 해주자. 3. 플레이어 설정해주기뷰 외부에 player를 선언해준다.import AVFoundation var player: AVAudioPlayer?4. 실행 함수 추가하기func playSound() { guard let url = Bundle.main.url(forResource: "watersound", withExtension: "mp3") else {return} do { player = try AVAudioPlayer(contentsOf: url) player?.play() } catch(let err) { print(err.locali..
Transition?뷰를 보여질때와 제거할때의 애니메이션Transition 의미는 뷰를 이동할때의 개념보다는, 뷰를 보여지게할때와 사라지게할때의 애니메이션이다. Transition은 인스턴스 메소드이다.구현부를 보면, 파라미터 값으로 AnyTransition이라는 값을 받게 되는데 해당 값은 뷰가 어떠한 변화를 감지했을때 이를 추가한 뷰를 다시 리턴해주는 방식으로 작용한다. AnyTransitionanytransition은 어떠한 타입의 트렌지션을 줄지에 대한것이며 구조체이다. 따라서 뷰에 transition을 주고, .anytransition중에 하나를 선택해서 보내주면, 해당 트렌지션이 작동하는 view를 리턴해주느 방식인 것이다. 예시코드struct ContentView: View { @State ..
먼저 SwiftUI는 반응형프로그래밍을 하기 위한 프레임 워크라는것을 이해하면 좋다. 기존의 MVC가 아닌 MVVM으로 프로그래밍을 할때 중요한것은 ViewModel과 View가 어떻게 연결되어있고, 서로 관찰하는지에 대해서 고민을 해야하며, 해당 데이터 바인딩을 어떻게 해줄지가 중요하다. 기존의 UIKit에서는 이러한 문제점을 RxSwift라는 3th party library를 사용해서 해결하였는데, (최근에는 콤바인등… )SwiftUI는 기본적으로 잘 설계되어 있어서 이러한 데이터 플로우에 대해서 이해하는 것이 굉장히 중요하다고 생각한다. 따라서 오늘은 ObservableObject, ObservedObject, StateObject에 관해서 공부를 해보자! ObservableObjectObserva..
우선 GeometryReader가 도큐먼트에 쓰여있는 정의를 번역하자면, GeometryReader는 그 자체로 ‘View’이며, container 안 View 스스로의 크기와 위치를 함수로 정의한다고 소개되어있다.GeometryReader를 사용하지 않는 코드struct ContentView: View { @State var isPresented = false var body: some View { VStack { Text("this is View") .padding() RightView() } } } struct RightView: View { var body: some View { Rectangle().foregroundColor(.blue) } }처음뷰는 기존의 VStack을 사용하는 방법과 동일..