-
View Drawing CycleiOS 2021. 3. 15. 16:42
안녕하세요. 그린입니다!
이번 포스팅에서는 iOS에서의 뷰 드로잉 사이클에 대해 알아보겠습니다.
Drawing Cycle?
: 뷰가 로드 되거나 변경이 있을때 화면에 시각적으로 표현되어 그려지는 일종의 사이클
1) 뷰 로드 시 시스템이 UIView에게 draw 메서드를 통해 드로잉을 요청
2) 뷰의 스냅샷을 캡쳐하여 UIView에게 전달
3) 뷰의 컨텐츠 변경 시 관련 메서드 (SetNeedsDisplay, SetNeedsLayout 등등..) 호출하여 시스템에 업데이트 요청
4) Next Drawing Cycle에서 업데이트 요청 받은 뷰를 업데이트
-> 뷰의 스냅샷을 캡쳐하고 뿌려주는 프로세스를 반복하는 과정!
View 컨텐츠 변경 관련한 업데이트 트리거 종류
1) View를 부분적으로 가린 타 View의 이동 및 제거
2) 히든 뷰 노출
3) 뷰를 화면 밖과 안으로 이동 및 스크롤
4) 뷰 드로잉 사이클 관련 메서드 호출 (명시적)
View Drawing Cycle 관련 메서드
1) setNeedsDisplay()
: 뷰 내 요소들을 드로잉 해줌
-. 호출시점: 다음번 드로잉 사이클 시 (draw() 자동 호출)
2) setNeedsLayout()
: 뷰 자체의 크기 및 위치를 레이아웃 시킴
-. 호출시점: 다음번 드로잉 사이클 시 (layoutSubviews() 자동 호출 )
3) displayIfNeeded()
: setNeedsDisplay와 같음 (layer의 내용을 강제로 업데이트)
-. 호출시점: Cycle을 기다리지 않고 즉시 실행
4) layoutIfNeeded()
: setNeedsLayout()과 같은 기능 (호출 시점만 다르다)
-. 호출시점: Cycle을 기다리지 않고 즉시 실행
Layout Cycle
-. Constraints -> Layout -> Draw
알아두어야 할 점!
1) 뷰의 드로잉은 요청 필요에 의해 발생한다
2) layoutIfNeeded 메서드는 즉시 실행됨으로 다음 사이클을 기다리지 않아 자연스러운 애니메이션 효과처럼 뷰가 변화한다.
(뷰가 확 바뀌지 않고 바로 실행됨으로..!)
3) 뷰가 처음 표시되거나 뷰의 일부 변경을 다시 그릴때 draw() 메서드 호출하여 뷰에 컨텐츠 드로잉을 요청 (직접 호출 금지)
-> 드로잉 시 iOS 내장 메서드 코드에 의해서만 호출 해야함
[참고자료]
https://daeun28.github.io/이론/post22/
https://zeddios.tistory.com/359
https://velog.io/@elile-e/Drawing-Cycle
https://docs.google.com/document/d/1paIjtx9uktmcKG2KiS4696QkQ4KVBj5NlgRHvXCiF9g/edit#
'iOS' 카테고리의 다른 글
OAuth (0) 2021.03.22 User Notifications (0) 2021.03.18 iOS File System (0) 2021.02.25 Responder Chain / Touch Event (0) 2021.02.22 의존성 관리도구 (0) 2021.02.18