일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Xcode
- HIG
- uiscrollview
- map
- 리팩토링
- ribs
- MVVM
- RxCocoa
- collectionview
- ios
- 스위프트
- uitableview
- UITextView
- Protocol
- Observable
- swift documentation
- clean architecture
- tableView
- Human interface guide
- Refactoring
- 애니메이션
- SWIFT
- swiftUI
- UICollectionView
- 리펙토링
- 리펙터링
- rxswift
- combine
- Clean Code
- 클린 코드
- Today
- Total
목록swiftUI (158)
김종권의 iOS 앱 개발 알아가기
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..
우선순위 처리 방법보통 OS에서 왼쪽 상단에서 시작하여 오른쪽을 읽고 아래로 순차적으로 읽어줌지구본의 이미지 -> Hello, world! -> toggle buttonex)Hello, world!가 가장 중요할 때, Hello, world!를 가장 먼저 읽히게 하고 싶은 경우?해당 뷰에 accessibilitySortPriority를 높게 설정하기 (값이 높을수록 가장 먼저 읽힘)따로 이 값을 설정 안하면 디폴트 값은 0ex) "Hello, world!" 뷰를 accessibilitySortPriority를 1로 설정struct ContentView: View { @State private var toggle = true var body: some View { VStack..
뷰를 버튼처럼 만드는 방법일반 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..
뷰 상태 관리상태가 변경되면 뷰가 업데이트 되는데 상태를 관리하는 방법은 크게 3가지ObservableObject 모델을 아래 3가지로 참고@StateObject (혹은@State), @ObservedObject, @EnvironmentObject)class Person: ObservableObject { @Published var name: String init(name: String) { self.name = name print("init > Person Model") }}struct Subview: View { @StateObject var personByState = Person(name: "jake") @ObservedObject var..
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..