일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- tableView
- 리펙토링
- Protocol
- rxswift
- uitableview
- MVVM
- swiftUI
- combine
- clean architecture
- SWIFT
- 스위프트
- Refactoring
- ribs
- 리팩토링
- Clean Code
- UICollectionView
- Xcode
- ios
- RxCocoa
- 클린 코드
- collectionview
- swift documentation
- UITextView
- scrollview
- Human interface guide
- HIG
- 애니메이션
- map
- uiscrollview
- Observable
- Today
- Total
목록전체 글 (1651)
김종권의 iOS 앱 개발 알아가기

우선순위 처리 방법보통 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..

진동 효과 (CoreHaptics)햅틱을 0.5초 주기로 1초 진동을 3번 순차적으로 주고 싶은 경우? -> CoreHaptics를 사용단순히 한 두번의 햅틱 반응을 주고 싶은 경우는 UIImpactFeedbackGenerator, UINotificationFeedbackGenerator 글 참고AudioToolbox라는 것을 사용하여 진동 효과를 줄 수 있는데, CoreHaptics가 가장 정교하게 진동 세팅이 가능CoreHapcits는 iOS 13부터 제공하며 햅틱의 패턴들을 정교하게 만들어 낼 수 있는 기능사용 방법importimport CoreHapticsenum을 사용하여 햅틱의 종류 설정enum HapticCategory { case a case b}a진동은 여러번 주는 진동으로하고..

DispatchQueue 작업 취소, 예약 방법5초 후에 특정 작업을 수행하고 싶은 경우?보통은 DispatchQueue 사용DispatchQueue.main.asyncAfter(deadline: .now() + 5) { // some task...}5초 후에 특정 작업을 수행하려고 하지만, 중간에 버튼을 누르면 이 작업을 취소하고 싶은 경우?DispatchSourceTimer 사용DispatchSourceTimer 개념타이머를 설정해놓고 특정 작업을 setEventHandler 클로저로 실행시킬 수 있는 기능이것을 사용하면 작업을 등록해놓고 cancel, pause 모두 다 가능DispatchSourceTimer 사용 방법인스턴스 하나를 두고 cancel(), pause()할 수 있도록 전역으로 ..

뷰 상태 관리상태가 변경되면 뷰가 업데이트 되는데 상태를 관리하는 방법은 크게 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..

UIScreenEdgePanGestureRecognizer 개념 edge pan이라는 이름에서도 볼 수 있듯이 아이폰의 가장장리 부분으로부터 안쪽으로 드래그하면 동작하는 제스쳐이 인스턴스의 프로퍼티 중 알아야 하는 것은 edgesedges: 드래그의 시작점 (top, left, bottom, right, all)let edgePanGesture = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(handleEdgePan(_:)))edgePanGesture.edges = .leftview.addGestureRecognizer(edgePanGesture)ex) edgePanGesture를 등록하여 왼쪽에서 오른쪽으로 드래그하면 뷰의 배경색상..