티스토리 뷰


레이아웃 변경이 발생하는 시점


UIView 의 크기가 변경되면, 크기가 변경된 UIView 의 서브뷰들은 위치와 크기가 조정되어야 한다. 

UIView 는 이를 위해 자동과 수동으로 UIView 의 layout을 조정하는 방법을 제공한다.


다음의 이벤트에 레이아웃 변경이 발생한다.



 

  1. UIView의 bounds 사이즈 변경
  2. Root view의 변화를 유발하는 Interface orientation (세로모드, 가로모드 등) 변화.
  3. UIView의 view layer 변화 유발 또는 layout을 요청하는 Core Animation sublayers 의 설정
  4. UIView의 setNeedsLayout 또는 layoutIfNeeded 메소드가 호출될 경우
  5. UIView의 layer에서 setNeedsLayout 이 호출되는 경우. (UIView는 Cora Animation Layer 인 CALayer 와 결합하여 화면에 컨텐츠/에니메이션을 표시. UIView 에는 layer 속성이 존재)





setNeedsLayout


간단히 말해서 'needLayout' flag를 YES로 셋팅하는 역할을 한다. 

이 플래그의 역할은 해당 뷰가 새로 layout이 필요함을 알려주는 것이다. 

따라서 해당 뷰가 redraw되는 시점에서 layoutSubViews가 호출되게 된다. 

대부분의 경우 setNeedsLayout을 직접 호출할 필요는 없다. 

왜냐하면 UIView의 autoresizesSubviews 프로퍼티의 디폴트 값이 YES이기 때문에, 

뷰의 프레임이 변할 때마다 자동으로 subview들도 layoutSubviews 가 되어 redraw 되기 때문이다.




layoutIfNeeded


needLayout flag가 YES일 때, 뷰가 redraw 되는 시점까지 기다리지 않고 

지금 당장 바로 redraw 시키고 싶을 때 호출한다.




drawRect


뷰에 무언가를 그릴 때는 drawRect: 함수를 이용하게 된다. 

뷰의 내용, 혹은 뷰의 하위 뷰의 어떤 그래픽적인 변경이 있어서 

뷰를 업데이트 해야 할 필요가 있을 때 이 메소드가 호출된다.

View 에 어떤 내용을 그리는 것은 성능 상 이슈로 반드시 drawRect: 에서만 해야한다.




sizeToFit, sizeThatFits


보통 값을 셋팅하고 sizeToFit을 할 것이다. sizeToFit을 하면 sizeThatFits가 불린다. 

그리고 sizeThatFits에서 서브뷰의 크기를 건드리거나 뷰를 붙이거나 떼거나 등의 일을 하면 layoutSubViews도 불린다. 

그러나 그런 일을 하지 않는다면 layoutSubViews는 자동으로 불리지 않는다.


따라서 만약 sizeThatFits에서 서브뷰의 크기 셋팅이 다 동일하더라도 layout을 다시 해야할 필요가 있다면

(ex: 상태값에 따라 서브뷰를 히든시키고 그에 따라 레이아웃을 바꾸는 등등) 

layoutSubViews를 부르기 위하여 setNeedsLayout 혹은 layoutIfNeeded를 직접 불러주어야 한다. (이때 layoutSubviews를 직접 호출하면 안된다.)





View 의 실제 크기를 구해오려면?


http://stackoverflow.com/questions/27653247/how-to-get-real-size-uiview-with-autolayout






참고


https://soulpark.wordpress.com/2012/12/01/adjusting-the-sie-and-position-of-views-at-runtime/

http://egloos.zum.com/lilypad/v/1130363

http://soooprmx.com/wp/archives/2380

http://stackoverflow.com/questions/27653247/how-to-get-real-size-uiview-with-autolayout





공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함