일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스위프트
- ribs
- collectionview
- Xcode
- map
- 리펙터링
- uitableview
- MVVM
- UICollectionView
- combine
- Human interface guide
- RxCocoa
- Clean Code
- rxswift
- uiscrollview
- swift documentation
- ios
- swiftUI
- UITextView
- SWIFT
- HIG
- 리팩토링
- 애니메이션
- tableView
- Refactoring
- Observable
- 클린 코드
- clean architecture
- Protocol
- 리펙토링
- Today
- Total
목록update cycle (5)
김종권의 iOS 앱 개발 알아가기
UIView에는 updateConstraints(), layoutSubviews(), draw(_:) 메소드가 존재 3가지를 이해하려면 아래 뷰가 그려지는 원리를 이해하는게 필요 import UIKit final class MyView: UIView { override func updateConstraints() { super.updateConstraints() print("updateConstraints()") } override func layoutSubviews() { super.layoutSubviews() print("layoutSubviews()") } override func draw(_ rect: CGRect) { super.draw(rect) print("draw(rect:)") } } ..
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..
update cycle: 유저로부터 이벤트 핸들링 코드 수행 main run loop: view들을 배치(layout), 가시(display), 제약(constaint) Layout이란? View의 위치와 크기 LayoutSubviews View와 자식 View들의 위치와 크기를 재조정 레이아웃 업데이트 시 직접적인 호출 불가: 재귀적으로 모든 자식 뷰의 layoutSubviews까지 호출해야 하므로 부하가 큰 작업 직접적으로 호출을 지양하므로 간접적으로 호출할 수 있는 방법이 디폴트: view의 layout변화(resizing, subview추가, 스크롤, 회전) LyaoutSubviews를 명시적으로 호출하는 방법 setNeedsLayout(): 바로 올 update cycle에 view의 layou..
1. Main Run Loop과 Update Cycle 앱 실행시, iOS의 UIApplication이 메인 스레드에서 main run loop를 실행 - main run loop: 각종 이벤트들을 관찰하며, 그 이벤트들을 처리, 각 이벤트들에 맞는 핸들러를 찾아서 그들에게 권한을 위임 (버튼 클릭, 가로 모드전환, 위치 변화) - update cycle: 이벤트 핸들러들이 처리하여 계산한 값을 토대로 UI가 실제적으로 반영되는 시점 2. setNeedsLayout과 layoutIfNeeded - 둘 다 UIView 의 메소드 - 둘 다 최종적으로 layoutSubViews()메소드를 호출하는 예약 메소드 1) layoutSubViews() - View의 레아아웃을 호출한 즉시 변경해주는 메소드 (단, ..
main run loop Main Run Loop : 사용자의 이벤트를 받아들이거나, response 하는 때 Update Cycle: Main Run Loop에서 response를 리턴한 경우 진입 (이 때 레이아웃을 재배치하거나 view를 그림) * iOS앱은 60fps이므로 update cycle의 주기도 1/60초 -> 뷰를 갱신하고 싶어도 이 갱신 주기를 기다려야함 layoutSubviews() 이 메소드는 위에서 레이아웃을 재배치할 때 사용되는 UIView의 메소드 (expensive하기 때문에 다른 메소드를 통해 간접적으로 호출) 1) setNeedsUpdate() : 다음 update cycle에 레이아웃을 갱신 2) layoutIfNeeded(): 즉시 레이아웃을 갱신하라 텍스트필드 클릭..