ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • View Drawing Cycle
    iOS 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://developer.apple.com/library/archive/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/GraphicsDrawingOverview/GraphicsDrawingOverview.html

    https://docs.google.com/document/d/1paIjtx9uktmcKG2KiS4696QkQ4KVBj5NlgRHvXCiF9g/edit#

    https://developer.apple.com/videos/play/wwdc2018/220

    '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
Designed by Tistory.