일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- RxCocoa
- 스위프트
- Human interface guide
- Clean Code
- tableView
- 리펙터링
- SWIFT
- ios
- 리펙토링
- uitableview
- UICollectionView
- ribs
- UITextView
- Protocol
- swift documentation
- MVVM
- swiftUI
- combine
- 리팩토링
- 클린 코드
- collectionview
- Refactoring
- rxswift
- Observable
- clean architecture
- 애니메이션
- HIG
- map
- Xcode
- uiscrollview
- Today
- Total
목록ios (1095)
김종권의 iOS 앱 개발 알아가기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bvHScB/btrjmWsGIfP/XyCGmK3Q42T4Xm2xk3aDTk/img.png)
구현 아이디어 UICollectionView 사용하고 layout은 IUCollectionViewFlowLayout 인스턴스 사용 UITextView를 갖는 커스텀 cell을 만든 후, 말풍선의 tipView는 CGMutablePath를 통해 그려주는 방식 커스텀 채팅 Cell 구현 class ChatMessageCell: BaseCollectionViewCell { // 구현 } 필요한 모델을 nested로 정의 enum ChatType: CaseIterable { case receive case send } struct Model { let message: String let chatType: ChatType } var model: Model? { didSet { bind() } } UI 컴포넌트 초..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/k4KdQ/btrjmWlhr98/Yw1RndlY1k9ORO3Qjo1wa1/img.gif)
DispatchQueue 개념 Thread pool을 thread safe하게 관리하는 객체 멀티 스레드에서도 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 발생하지 않는 것 Thread를 다루는 GCD(Grand Central Dispatch) 중 하나 DispatchQueue의 종류 3가지 1) main (serial) main thread에서 처리되는 serial queue (모든 UI관련 작업은 해당 큐에서 main queue에서 실행) 2) global (concurrent) 전체 시스템에서 공유되는 concurrent queue이고, concurrent이기 queue끼리의 우선순위를 위해서 queue를 사용할 때 QoS 설정 필요 userI..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cgsXlX/btrjkiJoarR/ff7Qg4XpPCvaKtyhGbDh4k/img.png)
Face ID 권한 요청 처음 Face ID 권한 요청을 위해 최초 한번 뜨는 alert touchID는 손가락을 댈때 인증이 시작하지만, FaceID는 폰과 얼굴을 마주보고 있어서 바로 인증이 진행되므로 필요 key: Privacy - Face ID Usage Description value: 사용자에게 표출되는 안내 문구 Face ID 인증 alert value값 문구 정의 주의 Face ID 인증을 사용할 땐 문구에 접근하는 이유를 명확히 할 것 (Touch ID는 필요 x) 구현 방법 LocalAuthentication 임포트 import LocalAuthentication LAContext() 인스턴스 생성 앱과 Secure Enclave를 연결해주는 인스턴스 App과 Secure Enclave..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ddanSv/btrjetCP7Hz/z1BM4RXK5LoKmdkI9CE4H0/img.gif)
* 기초 개념 URLSession 개념: https://ios-development.tistory.com/651 NSCache 개념: https://ios-development.tistory.com/658 Diffable Data Source 개념: https://ios-development.tistory.com/717 ImageCache를 사용하는 이유 TableView, CollectionView에서 사용자가 뷰를 스크롤 시 같은 이미지를 요청하는 경우가 생기고, 이때 cache를 통해서 이미지에 해당하는 URL은 API를 한 번만 호출하도록 하기 위함 ex) tableView에서 스크롤 시 화면에 보이는 cell의 모양을 계속 업데이트해야 하므로, cell을 만드는 메소드가 재호출되는 현상 Diff..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/YJKIN/btri5mkclzP/fLuKXSB9btr3dob7q4x0xk/img.png)
NSMutableAttributedString 텍스트 + 속성값을 가지고 있는 인스턴스 속성값: 텍스트 색상, 폰트, 하이퍼링크 등 속성 값을 가지고 있는 String 인스턴스 사용 방법 NSMutableAttributedString 인스턴스를 만든 후, 해당 인스턴스에 underlineStyle 속성을 추가하고, UIButton.setAttributedTitle()로 만든 인스턴스 주입 extension UIButton으로 구현 extension UIButton { // 구현 } UIButton의 title 획득 guard let title = title(for: .normal) else { return } NSMutableAttributedString 인스턴스 획득 let attributedStrin..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bf8qLi/btriUFJ38CH/KTzK4MZfyuiseYzoGSdUMK/img.gif)
UIProgressView Loading이 얼마나 지속되는지 알 수 있는 경우 UIProgressView를 사용 Loading이 얼마나 지속될지 알 수 없는 경우는 Spinner (UIActivityIndicatorView) 사용 UIProgressView 구현 방법 핵심 progressView.progress = 0.1: progress의 위치 (0 ~ 1) progressView.setProgress(_:animated:): progress의 위치 + 애니메이션 적용 (0 ~ 1) UIProgressView 초기화 lazy var progressView: UIProgressView = { let view = UIProgressView() /// progress 배경 색상 view.trackTintCo..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/G8g8y/btriBdVzTzA/pXjqW5uNohAhkzKKQNkpi0/img.png)
기본 개념 NSMutableAttributedString 텍스트 + 속성값을 가지고 있는 인스턴스 속성값: 텍스트 색상, 폰트, 하이퍼링크 등 NSMutableParagraphStyle 텍스트에 속성을 주입할 수 있는 인스턴스 UILabel에 간격 부여 방법 extension UILabel { func setLineSpacing(spacing: CGFloat) { } } text를 생성자로 주입하여 NSMutableAttributedString 인스턴스를 생성 guard let text = text else { return } let attributeString = NSMutableAttributedString(string: text) NSMutableParagraphStyle 인스턴스에 속성을 추가하고..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/YRp3F/btriq64d2ah/Mk4wrFBVtBgy2eVqjAy720/img.gif)
UISheetPresentationController iOS 15+ 부터 제공 내부적으로 UIViewController안에 프로퍼티가 존재하므로, UIViewController에서 바로 사용 가능 사용 방법 SheetPresentation에 담길 MyViewController 정의 class MyViewController: UIViewController { lazy var tableView: UITableView = { let view = UITableView() view.register(UITableViewCell.self, forCellReuseIdentifier: "cell") view.delegate = self view.dataSource = self return view }() var data..