최상 답변
UIWindow는 iOS (및 tvOS 및 watchOS) 용 UI 프레임 워크 인 UIKit의 클래스입니다.
앱을 시작할 때 무언가를 표시하는 일반적인 프로세스는 UIWindow를 만들고 표시하려는 뷰로 UIViewController를 만든 다음 UIWindow의 “루트 뷰 컨트롤러”를 UIViewController로 설정하는 것입니다.
스토리 보드 기반 앱을 만드는 경우이 작업이 완료됩니다. “Main Interface”를 설정할 수 있으며 해당 .storyboard 파일이 루트 뷰 컨트롤러로로드됩니다. AppDelegate에서이 UIWindow에 액세스 할 수 있습니다.
스토리 보드를 사용하지 않는 경우 다음과 같은 코드가 필요합니다.
var window: UIWindow?
func application(\_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
let vc = CustomViewController()
window?.rootViewController = vc
window?.makeKeyAndVisible()
}
AppDelegate의 didFinishLaunching 함수에서 UIWindow를 만들고 루트 뷰 컨트롤러를 앱으로 설정합니다. UIWindow를 화면에 표시하려면 하위 뷰로 추가하거나 다른 계층 구조에 배치하는 것과는 반대로 표시되도록 설정하면됩니다.
일반적으로 다른 뷰 컨트롤러를 더 많이 표시합니다. 루트 뷰 컨트롤러보다 모달로 표시하거나 탐색 / 탭 컨트롤러를 사용할 수 있으므로 앱에서 더 많은 창을 만들어야하는 이유는 많지 않습니다.
한 가지 이유는 경고를 표시하는 것일 수 있습니다. 또는 앱의 다른 모든 것 위에 UI 요소를 표시하려는 인앱 알림 시스템이 있습니다 (키보드 및 일부 시스템 알림 위).
또는 앱이 실제로 활용하는 경우 두 개의 화면 (예 : AirPlay를 통해)을 사용하려면 새 UIWindow를 만들고 해당 화면을 보조 화면의 화면으로 설정하고 루트 뷰 컨트롤러를 설정 한 다음 표시되도록 설정해야합니다.
직접 해결하려면 두 번째 질문은 뷰 컨트롤러 뷰의 하위 뷰로 여러 UIWindows를 추가 할 수 있다고 가정합니다 (예 : UIWindow는 하위 클래스 UIView를 수행합니다), 그러나 그것은 확실히 일반적으로 사용되는 방식이 아니며 실제로 어떻게 보일지 모릅니다.
Answer
우선 UIWindow에는 아무것도 없습니다. Swift와 관련이 있습니다. 어떤 형태로든 Swift 언어의 일부가 아닙니다. 현재 iOS 용 기본 UI 프레임 워크이며 곧 MacOS 용 기본 UI 프레임 워크가 될 Apple의 UIKit 프레임 워크의 일부입니다. UIViewController는 UIKit의 일부이기도합니다.
UIWindow는 앱의 사용자 인터페이스를 포함하는 것입니다. 사용자 상호 작용 이벤트를 뷰로 전달하는 것입니다. 일반적인 iOS 앱에는 단일 UIWindow가 있습니다.
UIViewController에는 아무것도 포함하지 않습니다. UIWindow 개체이며 그렇게된다면 잘못된 설계 결정이 될 것입니다.
문서를 읽어 보는 것이 좋습니다. UIKit | Apple 개발자 문서