일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 애니메이션
- Clean Code
- Observable
- UITextView
- RxCocoa
- 리펙토링
- map
- 리펙터링
- Xcode
- uitableview
- Protocol
- Refactoring
- collectionview
- 스위프트
- swiftUI
- UICollectionView
- HIG
- MVVM
- ribs
- tableView
- Human interface guide
- uiscrollview
- swift documentation
- ios
- 리팩토링
- rxswift
- 클린 코드
- clean architecture
- combine
- SWIFT
- Today
- Total
목록iOS 응용 (SwiftUI) (44)
김종권의 iOS 앱 개발 알아가기
SwiftUI의 bacgrkound와 overlaybackground와 overlay 옵션 모두 특정 뷰에 겹치게 뷰를 배치할 때 사용하는 메소드차이점은 background은 뷰 뒤에, overlay는 뷰 앞쪽에 배치 중첩됨ex) background를 사용하면 뷰 뒷쪽에 배치됨struct ContentView: View { var body: some View { VStack { Text("Hello, world!") .background { Color.blue } } .padding() }}ex) overay를 사용하면 뷰 앞쪽에 배치되므로 뷰가 가려..
ScrollViewSwiftUI에서는 ScrollView를 사용할 때, UIKit에서 제공하는 UIScrollView와는 아래 정보 확인이 바로 어려움reachToBottom (스크롤이 바닥에 도달했는지)contentOffset (얼만큼 스크롤을 진행했는지)위 정보를 알 수 있으려면 ScrollView를 감싸서 따로 계산하여 정보 획득이 가능reachToBottom과 contentOffset 구하는 아이디어ScrollView를 감싸서 구현하고, 아래처럼 사용하는쪽에서는 CustomScrollView에 클로저로 콘텐츠 뷰들을 넣을 수 있도록 구현 var body: some View { VStack { CustomScrollView( frameHeight: 300, ..
PreferenceKey일종의 키 이며, 이 키를 이용하여 특정 값을 변경될때마다 관찰할 수가 있음PreferenceKey로 데이터를 뿌리면, 이 데이터에 관심있는 쪽에서 해당 PreferenceKey로 옵저빙이 가능가장 대표적인 사용 방법은 자식뷰 -> 부모뷰로 데이터를 넘길때 사용UIKit에서는 델리게이트나 closure로 넘기지만 SwiftUI에서는 PreferenceKey라는 것이 존재사용방법ex) 자식뷰에서 TextView에 데이터가 입력될때마다 부모 뷰에 전달하고 싶은 경우?자식뷰 준비struct ChildView: View { @State private var inputText = "" var body: some View { VStack { ..
원 안에 테두리가 있는 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..
뷰를 버튼처럼 만드는 방법일반 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..
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: 이 프로퍼티는 오직 이것을 선언한 뷰 라이프 사이클에서만 관..