일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- uitableview
- 리팩토링
- ios
- collectionview
- MVVM
- map
- Observable
- ribs
- 클린 코드
- 리펙토링
- 리펙터링
- UITextView
- UICollectionView
- 스위프트
- Clean Code
- swiftUI
- Protocol
- Xcode
- swift documentation
- Human interface guide
- RxCocoa
- Refactoring
- uiscrollview
- clean architecture
- combine
- 애니메이션
- tableView
- SWIFT
- rxswift
- HIG
- Today
- Total
목록2022/03 (31)
김종권의 iOS 앱 개발 알아가기
사전 지식1) capture와 escaping의 개념 공통점: 둘 다 closure에서 사용되는 개념 차이점 capture: 클로저 내부에서 밖에 있는 scope의 instance를 참조하는 것 escaping: 클로저 외부에서 해당 클로저 자체를 참조하고 있는 것 사전 지식2) Escaping closure의 의미 `저장`되고, `지연`시킬 수 있는 기능 블록을 가지는 클로저가 바깥의 변수에 의해서 저장되는 경우 "Escaping closure"라고 정의 인자로 전달받은 함수 중 함수의 리턴 이후에 실행될 수 있는 함수 함수가 리턴되면 해당 scope은 사라지지만, closure는 함수의 scope을 escaping하여 함수 종료 후에 실행된다는 의미 // 함수의 return보다 completion이 ..
intrinsicContentSize intrinsicContentSize UILabel과 같은 UI에는 본질적인 크기와, 프레임 크기가 존재하는데 이 때 본질적인 크기를 의미 intrinsicContentSize를 가지고 있는 UI와 가지고 있지 않는것들로 분류 ex) UILabel은 intrinsicContentSize가 자동으로 불리는 형태 3초후에 text를 입력하고, 화면에 잘리지 않고 길이만큼 content가 표시되는지 테스트 override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) DispatchQueue.main.asyncAfter(deadline: .now() + 3) { self.nameLabel.text..
예제에서 편의를 위해 사용한 프레임워크 pod 'SnapKit' pod 'Then' pod 'RxSwift' pod 'RxCocoa' pod 'RxGesture' UITapGestureRecognizer를 사용하면서 발생되는 문제 맨 밑에 깔려있는 view에 tapGesture를 등록했을 때, subviews들을 tap해도 이벤트가 발생하는 문제가 존재 ex) 흰색 뷰에 tapGesture를 등록했을 때, layer2, layer1 뷰들을 탭해도 이벤트가 발동 - 상단에 팝업이 있고, 밑에 배경이 있을 때 배경을 탭한 경우 팝업을 숨기고 싶은 경우에 아래와 같이 처리되면 문제가 발생 (layer2만 탭해도 사라지는 현상이 발생할 것) Responder chain의 기본 원리는 superview부터 체크하..
* 애플의 지도앱과 같이 pan 제스처에 따라 sheet가 동적으로 이동되는 뷰는 UISheetPresentationController 포스팅 글 참고 구현에 편리를 위해 사용한 프레임워크 pod 'SnapKit' pod 'RxSwift' pod 'RxCocoa' pod 'RxGesture' 구현 아이디어 Sheet뷰의 핵심은 autolayout을 이용하여 위에서 나오도록 설정 커스텀 뷰 안에 show(), hide()를 구현하여 여기서 autolayout을 변경하여 애니메이션이 동작하도록 구현 backgroundView와 contentView를 놓고 backgroundView는 dimmed처리용도, contentView는 컨텐츠를 담을 용도 autolayout 핵심 - topSheet처럼 content..
1. UIViewPropertyAnimator, AnimationStates - 개념 2. UIViewPropertyAnimator, AnimationStates - fractionComplete, interactive animation (상호작용 애니메이션) UIViewPropertyAnimator UIView.animate와 다르게 시작, 종료, 일시중지, 정지, 완료가 가능 애니메이션 진행률과 같은 현재 상태에 대한 값도 알 수 있는 장점이 존재 iOS 10+ "프로퍼티 애니메이터"로 이름이 지어진 이유: 시작, 중지, 종료등을 컨트롤 할 수 있는 애니메이션 상태를 갖고 있기 때문 애니메이션 상태 새로 생성된 인스턴스는 inactive상태에서 시작 애니메이션을 마친 인스턴스도 inactive 상태로..
touches 제스쳐 touches 제스쳐는 UIResponder에 기본적으로 구현되어 있는 메소드로 4가지가 존재 // UIResponder - (void)touchesBegan:(NSSet *)touches withEvent:(nullable UIEvent *)event; - (void)touchesMoved:(NSSet *)touches withEvent:(nullable UIEvent *)event; - (void)touchesEnded:(NSSet *)touches withEvent:(nullable UIEvent *)event; - (void)touchesCancelled:(NSSet *)touches withEvent:(nullable UIEvent *)event; - (void)touche..
Semaphore 기본 지식 동시에 하나의 자원에 접근을 방지하게 할 수 있는 비동기 문제를 해결하는데 사용 여러 프로세스가 데이터를 공유하면서 작업을 수행할 때, 동시에 접근하는 안되는 자원을 동시에 접근할 수 없도록 막는 플래그 기능 * Critical Section: 동시에 접근하는 안되는 자원 Semaphore는 공유자원에 진입할 수 있는 허용 개수를 의미 (0이 되면 프로세스들의 공유 자원에 진입하는 것을 막는 것) var semaphore = 2 // 작업 1 수행 semaphore -= 1 // 현재 semaphore = 1 // 작업 2 수행 semaphore -= 1 // 현재 semaphore = 0 // 작업 3 수행 // 현재 semaphore가 0이므로 대기 Semaphore 연산..
Submodule 하나의 repository 안에 또 다른 별개의 repository 서브모듈 repository는 독립적으로 커밋을 관리 Repo 준비 (대체적으로 source tree 이용) 예제로 사용할 Repo 추가 우측 SomeRepo: 이곳에 서브모듈을 추가 좌측 MyModule: SomeRepo의 Submodule로 사용 SomeRepo에 MyModule을 서브 모듈로 추가 source tree로 하는 경우 SourceTree에서 SUBMODULES 오른쪽 마우스 클릭 -> Add Submodules 선택 MyModule URL을 입력 Local Relative Path에는 Submodule이 위치할 폴더가 필요하여, 아래처럼 생성 좌측 SUBMODULES에 SubmoduleFolder가 생..