TIL(Today I Learned)

4월 5일(월)

학습내용

  • Kahoot
    • Core Graphics를 통해 커스텀 뷰를 그릴 때 재정의 할 UIView 메서드는 draw 메서드이다.
    • Core Graphics는 3D 그래픽을 구현할 수 없다.
    • Quartz는 Core Graphics와 동의어다.
    • Core Graphics의 Context의 그리기 목적지로 가능한 것은 PDF, View, Window, Printer이다.
    • Context에 그리는 순서에 따라 결과가 달라질 수 있다.
    • Quartz 2D에서 배율변환, 회전 등의 변형은 Transform을 통해 가능하다.
    • Core Animation은 뷰를 직접 애니메이션하지 않고, Layer에 적용한다.
    • 화면에서 실질적으로 보여지는 모습을 반영하는 레이어 트리는 Presentation Tree이다.
    • 애니메이션 가능한 레이어 프로퍼티는 backgroundColor, anchorPoint, frame, hidden이다.
    • 애니메이션 변환 페이스를 나타내는 방식은 Timing Function이다.
  • Autolayout Advanced with 재르시
    • 원래는 frame에 좌표와 크기를 직접 정해주었으나, OS X Lion, iOS 6 이후로 오토레이아웃으로 위치와 크기를 정해줄 수 있게 되었다.
    • Interface Builder, NSLayoutAnchor, Visual Format Language, NSLayoutConstraint, 이 4가지 방법으로 오토레이아웃 적용할 수 있다.
    • Visual Format Language을 직접 사용하는 경우는 적지만, 오토레이아웃 디버깅을 위해서 읽을 줄 알아야한다.
    • [minX, width, minY, height], [minX, maxX, centerY, maxY], [centerX, width, baseline, height], 등을 충족시켜서 오토레이아웃을 적용할 수 있다.
    • 모호한 레이아웃(Ambiguous Layouts), 논리적 오류(Logical Errors), 불만족한 레이아웃(Unsatisfiable Layouts), 레이아웃의 문제는 3가지 경우가 있다.
      • 불만족한 레이아웃(Unsatisfiable Layouts): 2개 이상의 제약이 충돌하여(모든 제약을 동시에 만족시킬 수 없음), 화면 구성방법이 존재하지 않는 것을 불만족한 레이아웃이라고 한다.
      • 모호한 레이아웃(Ambiguous Layouts): 위치와 크기를 결정하기에 레이아웃이 아직 불충분하여 화면 구성방법이 2개 이상일 때를 모호한 레이아웃이라고 한다.
      • 논리적 오류(Logical Errors): 레이아웃 로직의 버그.
    • AutoresizingMask Log 보는법
      • h = -&& v = —& : -은 고정값, &은 flexible 값이다. h은 horizontal이며, 첫번째부터 왼쪽여백 너비, 오른쪽여백이다. v은 vertical이며, 첫번째부터 윗쪽여백, 길이, 아랫쪽여백이다.
    • updateConstraints(), layoutSubviews(), draw()는 직접호출하지 않는 것이 성능상 좋다.
    • Render loop는 1초에 최대 120번 호출될 수 있고, 변경사항이 없으면 호출되지 않는다.
    • updateConstraints는 최하단뷰에서 윈도우까지의 순으로 호출하는 반면에 layout과 display은 윈도우에서 최하단 뷰 순서로 호출된다.
    • Autolayout Engine은 뷰의 minX, minY, width, height을 계산해 낸다.
    • 제약조건은 적으면 적을수록 성능상 좋고, 그래서 제약보다 StackView를 사용하는 것이 성능상 좋다.
    • chisel은 facebook에서 만들었으며, LLDB에서 뷰와 관련된 추가적인 디버깅 기능을 제공한다.
    • Reveal 앱을 이용하여 화면에 대한 테스트를 할 수 있다. (바로 설정한 텍스트나 제약사항을 입력하면 시뮬레이터에 적용하는 등…)

문제점/고민한점

  1. AutoresizingMask란?
  2. render loop에서 update constraints와 layout의 차이점은?

해결방법

1.AutoresizingMask는 부모뷰의 크기가 변했을때 왼쪽 여백, 오른쪽여백, 윗쪽여백, 아래쪽 여백, 길이, 너비를 변화시킬지 말건지를 결정하는 정수 비트 마스크이다.

2.update constraints은 제약을 연산하여 갱신하는 것이고, layout은 연산된 제약을 토대로 View의 center와 bounds를 결정하는 것이라고 한다.

참고

https://developer.apple.com/documentation/uikit/uiview/1622559-autoresizingmask

https://mygumi.tistory.com/361

https://itpeace.tistory.com/44