일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Human interface guide
- 스위프트
- Refactoring
- clean architecture
- MVVM
- map
- ios
- swiftUI
- SWIFT
- Protocol
- rxswift
- ribs
- swift documentation
- HIG
- combine
- Observable
- 리펙터링
- collectionview
- Xcode
- UITextView
- tableView
- RxCocoa
- 애니메이션
- UICollectionView
- 리펙토링
- 클린 코드
- uitableview
- 리팩토링
- uiscrollview
- Clean Code
- Today
- Total
목록iOS 응용 (SwiftUI) (57)
김종권의 iOS 앱 개발 알아가기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bJKbD5/btsKcQrUkqB/GZyw02IdTr3QbzYKSlice0/img.png)
원 안에 테두리가 있는 UI원 안에 테두리가 있는 아래 UI를 구현하는 방법?보통은 Circle()을 선언하고 여기에 oberlay를 사용하여 stroke로 위에 뷰를 덫붙여서 구현struct ContentView: View { let lineWidth = 1.0 let length = 40.0 var body: some View { VStack { Circle() // 첫 번째 circle .stroke(Color(UIColor.clear), lineWidth: lineWidth) .background(Color(UIColor.lightGray)) .frame(widt..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Trsq2/btsJ3L5nQXi/b0xXWw1QYYGHkHV2bQv591/img.gif)
뷰를 버튼처럼 만드는 방법일반 SwiftUI의 버튼은 Button(action:label:)형태이며, presssed color는 label부분이 투명해지는 효과가 디폴트로 들어간 상태(코드)struct ContentView: View { @State private var isPressed = false @State private var isChecked = false var body: some View { VStack { normalButton } } @ViewBuilder private var normalButton: some View { Button(action: { isChe..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bAYwDi/btsJVI9fRjW/Khm02lzUsgKmkdzOOkfsKK/img.gif)
SwiftUI에서 애니메이션 적용 시 겪는 것뷰에다가 transition을 적용하려고해도 애니메이션이 걸리지 않음transition을 매번 적용하고 싶은데 매번 동작하지 않음(위와 관련된 개념들을 아래에서 알아볼 예정)샘플 코드 준비) 버튼을 누르면 카운트가 올라가는 뷰아직 애니메이션 적용 ximport SwiftUIstruct ContentView: View { var body: some View { VStack { Text("count: \(cnt)") Button("refresh") { cnt += 1 } } .padding() }}#Preview..
onAppear 호출 타이밍UIViewController의 viewWillAppear과 viewDidAppear 중간에 호출됨ViewController가 SwiftUI의 뷰를 가지고 있는 상태에서 각 print문을 넣어서 출력해보면, SwiftUI의 onAppear가 중간에 불리는 것을 확인viewWillAppearonAppear // 중간에 호출viewDidAppear코드)class ViewController: UIViewController { ... override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) print("viewWillAppear") } ov..
@StateObject, @EnvionrmentObject, @ObservedObject 구분모두 ObservableObject 타입의 모델을 프로퍼티로 선언할 때 사용class MyObject: ObservableObject { @Published var age = 0}struct ContentView: View { @StateObject var object1 = MyObject() @ObservedObject var object2 = MyObject() @EnvironmentObject var object3: MyObject var body: some View { }} 차이점?@StateObject: 이 프로퍼티는 오직 이것을 선언한 뷰 라이프 사이클에서만 관..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/VmsfX/btsJDUVQIyL/tCyicamV8iM8Dhjk6p5y11/img.png)
@StateObject 사용하다 보는 주의 메시지StateObject의 객체에 접근하다보면 가끔 뷰 install되기 전에 StateObject의 객체 접근하여 매번 새로운 인스턴스가 생성된다는 문구가 등장전체 코드는 아래와 같고, 이 원인 제공은 바로 @StateObject로 선언한 object의 값을 변경할 때 발생@mainstruct ExStateObjectApp: App { var contentView = ContentView() var body: some Scene { WindowGroup { contentView .onAppear { contentView.changeAge() ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/rTvBn/btsJvU18sGM/4VttX3QFfHXbjKxFJ5v5BK/img.png)
@State 사용 케이스@State는 뷰에서 접근하는 프로퍼티struct ContentView: View { @State private var inputText = "" @State private var onAppear = false var body: some View { VStack { TextField(text: $inputText) { Text("placeholder...") } .onAppear { onAppear = true } if onAppear { Text(..
@StateObject와 @ObservedObject 개념@StateObject와 @ObservedObject 모두 ObservableObject 모델을 옵저빙할 때 사용class MyViewModel: ObservableObject { @Published var count = 0}@StateObject var viewModel = MyViewModel()@ObservedObject var viewModel = MyViewModel()차이점?@ObservedObject 기능: 뷰가 다시 그려질 때, 뷰 내부에 @ObservedObject 모델을 두면 초기화됨@StateObject 기능: 뷰가 다시 그려질 때, 뷰 내부에 @StateObject 모델을 두어도 데이터가 유지됨뷰 상태관리 방법뷰를 사용..