Cocoa Touch Framework(2) UIViewController / AutoLayout

jhk·2023년 2월 21일

UIViewController를 알아보기 전에 UIView에 대해서 알아보자.

UIView

  • 앱 사용자 인터페이스의 기본 구성요소
  • 사각형 내에서 콘텐츠를 렌더링하고 해당 콘텐츠와의 모든 상호작용을 렌더링 하는 개체
  • 그리기, 애니메이션, 레이아웃 및 하위 뷰 관리, 이벤트처리 등
  • View 안에 View를 중첩하여 콘텐츠를 구성하는 계층 구조를 만들 수 있음
  • frame, bounds, center properties는 각 View의 Geometry를 정의

View는 라이브러리에서 캔버스로 드래그하거나 프로그래밍 방식으로 뷰의 초기 크기 및 위치를 지정하여 스토리보드에서 생성할 수 있다. UIView 클래스는 frame, bounds, center, transform, alpha, backgroundColor를 포함하여 애니메이션이 가능한 여러 속성을 정의한다.

https://developer.apple.com/documentation/uikit/uiview

UIViewController

  • 해당 클래스는 ViewController에서 사용되는 동작을 정의
  • 뷰 업데이트 -> 데이터 변경에 응답하여 업데이트
  • 사용자 상호작용에 대응
  • 뷰의 크기를 조절하고 전반적인 인터페이스의 레이아웃 관리
  • 앱의 다른 ViewController와 협력
  • 관리하는 뷰에 엄격하게 바인딩 되며, 뷰 계층 구조에서 이벤트 처리에 참여
  • UIResponder 객체

이외에도 ViewController는 관리하는 View의 생명 주기를 관리하는 데 중요한 역할을 한다.

ViewController가 메모리에 로드 -> viewDidLoad()
View가 표시되거나 숨겨지기 직전 / 직후 -> viewWillAppear(_:) / viewWillDisAppear(_:)
View가 표시되거나 숨겨진 직후 / 직전 -> viewDidAppear(_:) / viewDidDisappear(_:)

표준 UIController이외에도 UITableViewController, UINavigationController 등의 특수 기능을 제공하는 하위 클래스가 있다.

앱 동작을 정의하기 위해 UIViewController의 사용자 정의 하위 클래스를 만드는 것이 일반적이다. 이러한 Custom ViewController는 앱의 모양 및 사용자 상호작용에 응답하는 방식을 정의하는 역할을 한다.

ViewController가 View와 하위 View를 생성하면 해당 View의 유일한 소유자되어 생성, 수정, 제거를 포함하여 해당 View의 생명주기를 관리한다. View를 수동으로 만드는 경우 각 ViewController는 고유한 View 세트를 만들어야 한다. 서로 다른 ViewController간에 View를 공유하는 것은 불가능하다. 또한 ViewController가 할당 해제될 때 하위 View에 대한 참조를 해제해야 메모리 누수 및 기타 문제를 방지할 수 있다.

https://developer.apple.com/documentation/uikit/uiviewcontroller/

AutoLayout

AutoLayout은 앱의 내부 변경에 대한 동적 응답을 허용한다. 레이블이 긴 텍스트 문자열을 표시하거나 이미지가 다른 크기로 대체되는 경우와 같이 뷰 내부 콘텐츠가 변경되는 경우 추가 코드 없이 새 콘텐츠를 수용할 수 있도록 뷰 계층 구조의 레이아웃을 조정할 수 있다.

예를 들어 가변적인 텍스트를 표시하는 레이블이 있는 경우 레이블의 위치와 크기에 제약을 설정하여 컨테이너 뷰에 맞도록 지정한다. 레이블의 텍스트양이 변경되면 AutoLayout은 라벨의 크기를 동적으로 조정하여 지정된 제약조건을 유지하여 컨테이너에 맞추도록 할 수 있다.

텍스트가 레이아웃에 영향을 미치는 것 외에도 글꼴 크기를 변경하면 다른 요소의 레이아웃에도 영향을 미칠 수 있기 때문에 이러한 변경 사항을 동적으로 처리하는 데 도움이 된다.

frame-basedautoresizing mask에 비해 AutoLayout은 더 큰 유연성과 적응성을 제공한다. 다양한 장치 화면 크기 및 방향을 지원하고 다양한 언어 및 지역에 맞게 앱을 현지화하기 더욱 수월하다. 하지만 View와 제약이 많은 복잡한 사용자 인터페이스의 경우 구현이 복잡해질 수 있다.

https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/AutolayoutPG/index.html

profile
Dart Night

0개의 댓글