본문 바로가기

UIKIT

UIScreen과 UIScene

1. UIScreen: 화면 자체를 나타냄

  • 역할: 실제 디스플레이 장치와 관련된 정보를 제공합니다.
  • 설명:
    • UIScreen은 iOS 장치의 물리적 화면 자체를 나타냅니다.
    • 화면의 크기, 해상도, 스케일 정보 등을 가져오는 데 사용됩니다.
  • 주요 속성 및 메서드:
    • UIScreen.main: 주 화면(기본 디스플레이 장치)을 나타냅니다.
    • UIScreen.screens: 연결된 모든 디스플레이(예: 외부 모니터)를 나타냅니다.
    • bounds: 화면의 크기(픽셀 기준).
    • nativeBounds: 실제 디바이스의 픽셀 크기.
    • scale: 화면의 스케일 값(예: @2x, @3x).
  • 사용 예시
// 주 화면의 크기 가져오기
let screenSize = UIScreen.main.bounds.size
print("Screen size: \(screenSize)")
  • 언제 사용하는가?
    • 화면 크기에 따라 UI 레이아웃을 조정해야 할 때.
    • 여러 화면(외부 디스플레이)을 지원할 때.

 

2. UIScene: 앱의 논리적 화면을 나타냄

  • 역할: 앱에서 하나의 논리적 UI 흐름 또는 사용자 작업 환경을 나타냅니다.
  • 설명:
    • UIScene은 앱의 논리적인 화면 컨텍스트를 나타냅니다.
    • iOS 13 이후 도입된 멀티윈도우 지원을 위한 개념입니다.
    • 앱은 하나 이상의 UIScene을 가질 수 있습니다.
    • 예를 들어, iPad에서 한 앱을 멀티윈도우로 실행하면 각 윈도우는 서로 다른 UIScene으로 관리됩니다.
  • 주요 속성 및 메서드:
    • UIScene.session: 현재 장면의 세션(UISceneSession)을 반환.
    • UIScene.delegate: 장면의 delegate 객체(UISceneDelegate).
    • UIScene.state: 현재 장면의 상태(예: 활성화, 비활성화).
  • 사용 예시
// UISceneDelegate에서 현재 Scene의 상태 확인
func sceneDidBecomeActive(_ scene: UIScene) {
    print("Scene became active")
}
  • 언제 사용하는가?
    • 앱에서 멀티윈도우를 지원할 때.
    • 앱의 논리적 UI 흐름을 관리해야 할 때.

언제 각각을 사용하는가?

  • UIScreen:
    • 디스플레이 관련 정보가 필요할 때:
      • 화면 크기(bounds)에 따라 레이아웃을 조정.
      • 외부 디스플레이 연결 시 각 화면 정보를 확인. 
let screenSize = UIScreen.main.bounds.size
  • UIScene:
    • 멀티윈도우를 지원하거나, 논리적인 UI 상태를 관리할 때:
      • iPad에서 Split View나 Slide Over 같은 멀티윈도우 기능.
      • 앱의 특정 UI 상태를 관리(예: 활성화, 비활성화, 세션 복원).
func sceneDidBecomeActive(_ scene: UIScene) {
    print("This scene is now active")
}