본문 바로가기
iOS/iOS

[iOS 기초] UIView

by 원만사 2021. 11. 17.
반응형

화면의 직사각형 영역에 대한 내용을 관리하는 개체
@MainActor class UIView : UIResponder

 

개요

 뷰는 사용자 인터페이스의 기본 구성요소이며 UIView 클래스는 모든 뷰에 공통 동작을 정의한다. View 객체는 사각형 경계 내에 컨텐츠를 렌더링하고 해당 컨텐츠와의 상호작용을 처리한다. UIView 클래스는 인스턴스화하고 고정된 배경색을 표시하는 데 사용할 수 있는 클래스이다. 보다 정교한 컨텐츠를 위해 서브클래스화 할 수도 있다. 앱에서 볼 수 있는 라벨, 이미지, 버튼 및 기타 인터페이스 요소를 표시하려면 직접 정의하기 보다는 UIKit 프레임워크에서 제공하는 뷰 하위 클래스를 사용하면 된다.

 

 뷰 객체는 앱이 사용자와 상호 작용하는 주요 방법이기 때문에 여러 임무가 있다. 다음은 그 중 몇가지 예시다:

  • 드로잉과 애니메이션
    • 뷰들은 자신의 사각형 영역에 UIKit이나 Core Graphics를 사용해서 컨텐츠를 그린다.
    • 일부 뷰 프로퍼티들은 새로운 값으로 애니메이션 될 수 있다.
  • 레이아웃과 서브 뷰 관리
    • 뷰는 0개 이상의 서브뷰를 포함할 수 있다.
    • 뷰는 서브뷰의 크기와 위치를 조절할 수 있다.
    • 뷰 계층 구조의 변화에 대응하기 위해 오토 레이아웃을 사용해서 뷰의 크기와 위치를 재조정하는 규칙 생성
  • 이벤트 처리
    • 뷰는 UIResponder의 하위 클래스이며 터치 및 기타 유형의 이벤트에 응답할 수 있다.
    • 뷰는 일반적인 제스처를 처리하기 위해 제스처 인식기를 설치할 수 있다.

 

 뷰는 다른 뷰 내부에 중첩되어 뷰 계층을 만들 수 있으므로 관련 컨텐츠를 편리하게 구성할 수 있다. 뷰를 중첩하면 중첩된 자식 뷰(서브 뷰)와 부모 뷰(슈퍼 뷰) 사이에 부모-자식 관계가 만들어진다. 부모 뷰에는 여러 개의 서브 뷰가 포함될 수 있으나 각각의 서브 뷰에는 오직 한 개의 슈퍼 뷰만이 존재한다. 기본적으로 서브 뷰의 보이는 영역이 슈퍼 뷰의 범위를 벗어나도 서브 뷰의 컨텐츠가 잘리지 않는다. 이를 변경하려면 clipsToBounds 속성을 사용하면 된다.

 

 각 뷰의 범위는 frame과 bounds 속성에 의해 결정된다. frame 속성은 슈퍼 뷰의 좌표계에서 뷰의 원점과 크기를 정의한다. bounds 프로퍼티는 뷰가 보는 대로 뷰의 내부 크기를 정의하며 사용자 정의 그리기 코드에는 거의 사용되지 않는다. center 속성을 사용하면 frame 또는 bounds 속성을 직접 변경하지 않고도 뷰의 위치를 편리하게 변경할 수 있다. 

 

뷰 생성

 일반적으로, 라이브러리에서 캔버스로 드래그를 통해서 스토리보드에 뷰를 생성할 수 있다. 또한 코드를 통해서 뷰를 생성할 수도 있다. 뷰를 만들 때, 초기 크기와 향후 슈퍼 뷰에 상대적인 위치를 지정한다. 예를 들어 다음과 같은 코드는 뷰를 생성하고 슈퍼뷰의 좌표계에 있는 왼쪽 상단 (10, 10)에 배치한다.

1
2
3
let rect = CGRect(x: 10, y: 10, width: 100, height: 100)
let myView = UIView(frame: rect)
 
cs

 다른 뷰에 서브 뷰를 추가하려면 슈퍼 뷰에서 addSubview(_:) 메서드를 호출하면 된다. 뷰에 하위 뷰를 여러 개 추가할 수 있으며, iOS에서는 아무 문제 없이 형제 뷰끼리 overlap 될 수 있다. insertSubview(_ : aboveSubview:) 및 insertSubview(_:belowSubview:) 메소드를 사용하여 서브 뷰의 상대적 z 순서를 지정할 수 있다. exchangeSubview(at: withSubviewAt:) 메서드를 사용하여 이미 추가 된 하위 뷰의 위치를 교환할 수도 있다.

 뷰를 생성한 후, 오토 레이아웃 규칙을 생성하여 나머지 뷰 계층 구조의 변경에 따라 뷰의 크기와 위치가 어떻게 변경되는지 제어할 수 있다.

 

 

References

반응형

'iOS > iOS' 카테고리의 다른 글

[iOS] UIButton  (0) 2021.11.28
[iOS] @IBOutlet과 @IBAction  (0) 2021.11.22
[iOS 기초] UIKit 프레임워크  (0) 2021.11.17
[iOS 기초] Label, Button 연결  (1) 2021.10.15
[iOS 기초 - 03] 처음 생성된 ViewController.swift의 내용  (0) 2021.10.15

댓글