일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- UICollectionView
- Protocol
- UITextView
- Observable
- Human interface guide
- ios
- combine
- swift documentation
- tableView
- collectionview
- SWIFT
- map
- 클린 코드
- RxCocoa
- uitableview
- Refactoring
- Xcode
- 애니메이션
- uiscrollview
- Clean Code
- 스위프트
- 리펙터링
- 리팩토링
- MVVM
- ribs
- HIG
- rxswift
- 리펙토링
- clean architecture
- swiftUI
- Today
- Total
목록iOS 기본 (swift) (149)
김종권의 iOS 앱 개발 알아가기
Roundable 버튼 layer.cornerRadius값이 width나 height의 값의 반일때 원이 되므로 이 특성을 사용 // ViewController.swift NSLayoutConstraint.activate([ self.circleView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 120), self.circleView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor), self.circleView.widthAnchor.constraint(equalToConstant: 120), self.circleView.heightAnchor.constraint(equalToCons..
Layout 용어와 layoutSubviews() 메소드 UIView의 layout이라는 의미는 위치와 크기를 의미 layoutSubviews() 메소드는 UIView의 layout을 변경 즉, layoutSubviews() 메소드는 UIView의 위치와 크기를 재조정하는 메소드 layoutSubviews()는 재귀적으로 자식들의 layoutSubviews()도 재귀적으로 실행 layoutSubviews()가 실행되는 시점은 main run loop에 따라서 실행 UI를 건드리는 작업은 디바이스에 부담이 되는 작업이므로 내부적으로 UI 작업에 main run loop라는 방법을 통해 해결 Main Run Loop 개념 앱이 실행되면 iOS는 내부적으로 메인 스레드에서 main run loop를 실행 iO..
Key의 개념 스위프트의 KeyPath, KVC, KVO 자꾸나오는 Key의 개념은? 문자열(Key)를 의미하고 이 key값을 통해 인스턴스의 프로퍼티 값(Value)에 간접적으로 접근하게 해주는 Objective-C에서 나온 개념 KVC (Key Value Coding) 인스턴스의 프로퍼티에 접근할 때 key값인 문자열로 접근하는 방법 KVC는 Objective-C 런타임에 의존하므로 프로퍼티 앞에 @objc 어노테이션을 붙여서 사용 단, Objective-C의 것이기 때문에 NSObject가 가지고 있으므로 NSObject의 서브클래스여야 가능 KVC 예제 KVC를 사용하기위해서 NSObject를 서브클래싱하고 @objc를 붙인 모델 정의 class Person: NSObject { // NSObje..
Custom Loading 구현 아이디어 최상위 UIWindow는 UIView를 서브클래싱한 인스턴스이므로, window.addSubview하여 커스텀 로딩 화면을 넣어주면 UIWindow하위에 존재하는 현재 화면위에 로딩이 뜨도록 구현 Loading 애니메이션은 Lottie 사용 사용한 프레임워크 Lottie -로딩 애니메이션에 사용 SnapKit - 코드 베이스로 레이아웃 구현에 편의를 위해 사용 pod 'lottie-ios' pod 'SnapKit' UIWindow 개념 UIWindow는 사용자에게 보여지는 화면을 담고 있는 최상위 ContainerView 실제로도 UIWindow는 UIView의 서브클래스 이 밖에도 UI 이벤트 처리도 같이 담당 싱글톤인, AppDelegate로 window에 ..
View와 Layer private let someView: UIView = { let view = UIView() view.backgroundColor = .systemBlue view.layer.shadowOffset = CGSize(width: 0, height: 10) view.layer.shadowColor = UIColor.black.cgColor view.layer.shadowOpacity = 0.3 view.layer.cornerRadius = 60 view.layer.borderWidth = 3 view.layer.borderColor = UIColor.green.cgColor view.translatesAutoresizingMaskIntoConstraints = false return ..
Hugging과 Compression 개념 Hugging 뷰가 고유 크기보다 커지는 것을 방지하기위해 우선 순위를 설정하는것 커지지 않게 하다 = "Hugging" Compression 뷰가 고유 크기보다 작게 되는것을 방지하기위해 우선 순위를 설정하는것 작게 되지 않게 하다 = "CompressionResistance" * Hugging, Compression 관련한 더욱 자세한 개념은 이전 포스팅 글 참고 Default Priority 값 * 위 표는 code base기준이므로, Interface Builder 사용 시 다른 표 참고 UISwitch와 UILabel을 코드로 만들었을 때, horizontal의 디폴트 hugging 값이 각각 다르며, 이처럼 UI마다 각각 다른 default값이 존재 ..
Thread Safe 멀티 스레드 프로그래밍에서 instance나 method에 여러 스레드가 동시에 접근이 이루어져도 프로그램 실행에 문제가 없는 것 ex) thread safe하지 않은 경우, 증상 중 하나 deadlock 자원을 점유하고 있으면서 동시에 다른 자원을 요청하여 계속 wait하는 상태 Thread-safe 지키는 방법 Re-entrancy 어떤 method가 한 스레드에 의해 호출되어 실행중일 때, 다른 스레드가 이 method를 호출하더라도 그 결과가 각각에게 올바르게 주어짐 Thread-local storage ( = Immutable Objects) 공유 자원을 최대한 줄여서 동시 접근을 막는 방법 mutual exclusion 공유 자원을 사용하는 경우, 해당 자원의 접근을 se..
UIButton 하나로 토글 버튼 구현 방법 UIButton에는 normal, selected, highlighted가 존재 normal과 selected 상태를 이용하여 토글 버튼으로 활용 highlighted애니메이션은 setImage(_:for:) 에서 for부분에 적용 normal -> highlighted 애니메이션은 for: .highlighted로 설정 selecte -> highlighted 애니메이션은 배열로 선언 [.selected, .highlighted] button.setImage(UIImage(named: "play"), for: .normal) button.setImage(UIImage(named: "play-pressed"), for: .highlighted) button.s..