swift

Layout Update Method

motosw3600 2021. 12. 9. 18:08

View를 구성하고 레이아웃을 업데이트하는 메소드

1. draw()

2. layoutSubViews()

3. setNeedsDisplay()

4. setNeedsLayout()

5. displayIfNeeded()

6. layoutIfNeeded()

 


draw()

  • 전달된 사각형안의 reciever의 이미지를 그린다.
  • CoreGraphics 및 UIKit의 프레임워크에서 뷰를 그리는 하위클래스들은 draw() 오버라이딩하여 구현
  • 배경만 표시하는 View이거나 기본 layer객체를 사용하여 직접 컨텐츠를 구성하는 경우엔 사용 안해도됨
  • layoutSubView와 다르게 자식 view의 draw까지는 호출하지 않는다.

 

※ 이 메서드는 뷰가 처음 표시되거나 뷰의 보이는 부분을 무효화하는 이벤트가 발생할 때 호출된다. 

이 메서드를 직접 호출해서는 안 된다. 해당 부분을 다시 그리려면 setNeedsDisplay() 또는 setNeedsDisplay(_:) 메소드를 대신 호출하여 사용해야 한다.

-> 뷰가 로드된 후 ViewDidLoad에서 View가 메모리에 올라가고 draw메소드가 호출되면서 View Update.

이때 draw메소드를 호출하면 안됨!! View의 업데이트가 필요하면 setNeedsDisplay() 또는 setNeedsDisplay(_:) 메소드를 호출하여 다음 드로잉사이클에 반영

 


layoutSubViews()

  • 자신의 view와 subView의 레이아웃을 배치하는 메소드
  • draw()와 마찬가지로 직접호출하면 안된다. 다음 드로잉 사이클에 그리는 setNeedsLayout()나 즉시 업데이트하는 layoutIfNeeded()를 호출하여 내부적으로 layoutSubViews를 호출해야한다.

※ 아래의 상황에선 예외적으로 시스템에서 자동으로 layoutSubViews()를 호출한다.

 

  1. Resizing a view
  2. Adding a subView
  3. Scroll
  4. rotate device
  5. update view constraints

 


setNeedsDisplay()

  • 뷰가 다시 그려져야되는것을 알려야할때 사용하는 메소드
  • 뷰 업데이트 되는 다음 드로잉 사이클까지 기다리기 때문에 실제로 바로 그려지지는 않는다.
  • 즉 View가 업데이트됬다는 사실을 알려주기위해 사용
  • 거의 모든 표준 UI 구성요소 View의 프로퍼티가 수정되면 내부적으로 setNeedsDisplay가 트리거되면서 자동으로 호출되고 View가 다시 그려진다.
  • 내부적으로 draw(rect:)가 실행됨

 

언제 사용해야 되는가?

  • 말그대로 커스텀 View를 구성하고 draw메소드를 재정의 하고 변경이 일어났을 때 명시적으로 업데이트 할 때 사용

 


setNeedsLayout()

  • receiver의 현재 레이아웃을 무효화하고 다음 업데이트 주기 동안 레이아웃 업데이트를 트리거한다.
  • setNeedsDisplay()와 비슷하게 바로 업데이트가 되지 않고 다음 주기에 레이아웃을 업데이트한다.
  • 다음 주기에 언제 업데이트될지는 모르지만 setNeedsDisplay,setNeedsLayout모두 비동기 이벤트
  • 내부적으로 layoutSubViews()가 실행됨

 


DisplayIfNeeded()

  • 다음 업데이트 주기를 기다리지 않고 레이어의 내용을 강제로 업데이트

레이어를 업데이트하는 가장 좋은 방법은 setNeedsDisplay()를 호출하고, 다음주기 동안 시스템이 레이어를 업데이트 하도록 하는 것

 


layoutIfNeeded()

  • 다음 업데이트 주기를 기다리지 않고 즉시 레이아웃을 업데이트하는 메소드
  • setNeedsDisplay와는 다르게 동기호출. 업데이트 주기를 기다리지 않고 바로 호출되고 바로 업데이트

layoutSubView 호출 시점

'swift' 카테고리의 다른 글

URLSession  (0) 2021.12.10
Method Swizzling  (0) 2021.12.10
KVC, KVO  (0) 2021.12.08
Properties  (0) 2021.12.08
ARC(Auto Reference Count)  (0) 2021.12.07