viewHierarchy

Kyu hyunSung·2025년 4월 19일

IOS

목록 보기
3/9
post-thumbnail

UIkit Framework 계층도임 이걸 왜 보여주냐고 ?

우리는 View에 관련하여 이야기 할거기 때문임

0.UIWindowScene

UIWindowScene은 앱의 UI 인스턴스를 관리하며, 해당 씬에서 표시되는 하나 이상의 창(UIWindow)을 포함합니다.

프로젝트가 생성될 때, SceneDelegate.swift를 보면

이런식으로 되어있을 거임

import UIKit

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?


    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
        // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
        // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
        guard let _ = (scene as? UIWindowScene) else { return }
    }

전에 잠깐 얘기했듯이 SceneDelegate는 Scene(UI 인스턴스) 관리도 하는 역할임

그 관리를 UIWindowScene을 통해서 다 한다고 생각하면 좋을듯

즉,

  • SceneDelegate는 UIWindowScene의 생명주기 이벤트를 처리합니다.
  • UIWindowScene은 하나 이상의 UIWindow를 포함할 수 있는 컨테이너.
  • SceneDelegate의 window 프로퍼티는 이 UIWindowScene에 연결된 주요 UIWindow를 참조.
  • 이 window를 통해 앱의 뷰 계층구조와 뷰 컨트롤러를 설정하고 관리.

1. UIWindow

앱의 사용자 인터페이스를 위한 배경과 뷰에 이벤트를 전달하는 객체.

– 모든 앱은 하나의 UIWindow 인스턴스를 가진다.
– 앱의 여러 뷰들은 이 UIWindow 인스턴스 내 포함된다

입력받으면 바로 동작하는게 아니라 이새기를 거쳐서 동작함

징검다리라 생각하면될듯

2. UIScene

UIScene은 앱의 UI 인스턴스를 나타내며, 사용자가 요청하거나 앱이 생성한 각 UI 인스턴스에 대해 UIKit이 씬 객체를 생성합니다.

핵심 특징

  • 독립적 UI 표현: 앱의 분리된 인터페이스 인스턴스를 관리
  • 독립적 생명주기: 각 씬은 고유한 상태 전환(포그라운드/백그라운드)을 가짐
  • 멀티태스킹 지원: iPad 분할 화면, 외부 디스플레이 등 지원

스토리보드에서 편집하는 각 ViewController는 하나의 화면(Scene)을 담당함.

ViewController는 화면의 콘텐츠를 표현하고 View를 관리를 하는데,

보통 하나의 Scene에는 하나의 ViewController가 필요합니다.

즉, 앱에 두 개의 Scene이 있다면, 두 개의 ViewController가 필요하다고 볼 수 있음.

3. UIview

화면의 직사각형 영역에 대한 콘텐츠를 관리하는 객체.

로 정의할 수 있음

우리는 View, Button 같은 객체들을 화면에 끌어다가 쓸건데

그걸 관리해주는 상위에있는 객체라 생각하면될듯

뷰: 사용자에게 보일 수 있는 객체

– 뷰는 UIView의 인스턴스이거나 UIView 하위 클래스의 인스턴스이다.
• 통상 클래스 계층에서 단말 뷰를 컨트롤 또는 위젯이라 함
뷰는 자신을 어떻게 그리는지 알고(뷰 자신 이) 있다
– 뷰는 터치와 같은 이벤트를 처리할 수 있다.
– 뷰 인스턴스는 뷰 계층 구조상에 존재한다. 뷰 계층 구조의 루트는 앱의 윈도우이다

다음과 같은 특징으로 정리할 수 있을듯.

4. viewDebugging

[iOS - swift] UI 디버깅 방법 - Debug View Hierarchy

이분 방법대로 빌드해서 View Debugging하면

이런식으로 나눠 볼 수 있음

조금 정리를 하자면

  1. 최상위에서 하위로: UIWindowScene → UIWindow → 컨테이너 뷰 → ViewController → UIView → UI 컴포넌트(UILabel, UIButton 등)의 계층적 트리 구조로 배치.
  1. 이벤트 처리: 사용자 터치는 위에서 아래로 전달되어 적절한 뷰에서 처리됩니다.
  1. 레이아웃: 부모 뷰가 자식 뷰의 크기와 위치를 결정하며, 상위에서 하위로 레이아웃이 계산됩니다.
  1. 렌더링: 화면 그리기는 하위에서 상위로 진행되어 최종 화면이 구성됩니다.

    화면이 그려지는 과정
    – 윈도를 포함한 각 계층 구조의 뷰는 자신을 레이어(CALayer)에 그린다.
    – 모든 뷰의 레이어들은 전체 화면에 합성된다

이정도 될거같음

더 자세한건

여기를 참고 하면 좋음

profile
디지털 치매 예방

0개의 댓글