UIWindow
一个 UIWindow 对象提供了应用程序的用户界面的背景和提供重要的事件处理行为。 窗户没有任何自己的视觉外观,但它们表示的关键应用程序的观点。 屏幕上出现的每个视图都被封闭在一个窗口,每个窗口是独立于其他windows应用程序。 最初被应用程序接收到的事件路由到相应的窗口对象,进而将这些事件转发给适当的视图。 Windows使用视图控制器来实现取向变化和执行其他任务,应用程序的操作的基础。
概述
Windows应用程序的一个基础部分,但你只与它们进行交互代码中的最低限度。 UIKit处理大多数窗口相关的相互作用,与其他对象需要实现很多应用程序的行为。 然而,您需要在应用程序执行以下操作:
- 提供一个主窗口来显示应用程序的内容。
- 创建额外的窗口(根据需要)来显示更多内容。
提供应用程序的主窗口是很容易因为Xcode是否适合你。 新的iOS项目使用故事板来定义应用程序的视图。 故事板需要一个窗口属性的存在应用程序委托对象,自动提供Xcode的模板。 因此没有精力,新项目的主窗口来显示他们的视图控制器内容。
大多数应用程序只需要一个窗口,显示设备的主屏幕上的应用程序的内容。 您可以创建额外的窗口,并将它们显示在设备的主界面中,但额外的windows更常用的连接外部显示器显示内容。 除了为应用程序提供窗口对象的内容,您还可以使用窗口对象的少数其他任务:
- 设置窗口的z轴水平,从而影响窗口的可见性相对于其他窗口。
- 显示窗口和键盘事件的目标。转换坐标值与窗口的坐标系统。
- 改变一个窗口的根视图控制器。
- 改变窗口的屏幕上显示出来。
你应该很少需要子类ui窗口。 的行为可以实现在一个窗口通常可以更容易实现更高级别的视图控制器。 在为数不多的几次你可能想子类覆盖becomeKeyWindow或resignKeyWindow方法来实现自定义窗口的关键状态变化时的行为。
信息视图控制器是如何展示他们的内容在一个窗口看到视图控制器为iOS编程指南。 信息如何显示一个窗口在一个特定的屏幕,看到UIScreen。
创建额外的Windows应用程序
除了你的应用程序的主窗口(Xcode通常提供),你是负责创建和配置任何额外的windows应用程序使用的。 额外的窗口的最常见用法是连接外部显示器显示内容,但你也可以在同一屏幕上显示多个窗口。
在创建窗口时,总是设置窗口的初始大小和指定屏幕上显示它。你还应该指定根视图控制器,提供您想要显示的内容。虽然可以直接添加子视图窗口,提供一个根视图控制器是一个更好的方法来管理窗口的内容。使用根视图控制器维护窗口对象和内容之间的分离应用程序显示在窗口中。
清单1显示了一个示例方法配置自定义窗口视图控制器第二个屏幕上显示的内容。 实现这个方法的示例假设对象使用一个externalWindow变量存储到窗口的引用。
清单1为第二个屏幕创建一个窗口
- (void)configureExternalDisplayAndShowWithContent:(UIViewController*)rootVC
{
// Configure the content only if a second screen is available.
if ([[UIScreen screens] count] > 1) {
UIScreen* externalScreen = [[UIScreen screens] objectAtIndex:1];
CGRect screenBounds = externalScreen.bounds;
// Configure the window
self.externalWindow = [[UIWindow alloc] initWithFrame:screenBounds];
self.externalWindow.windowLevel = UIWindowLevelNormal;
self.externalWindow.screen = externalScreen;
// Install the root view controller
self.externalWindow.rootViewController = rootVC;
// Show the window, but do not make it key.
self.externalWindow.hidden = NO;
}
else {
// No external display available for configuration.
}
}
了解键盘交互
而触摸事件交付给窗口,它们发生,事件没有相关协调价值交付的关键窗口。 只有一个窗口可以关键窗口,你可以使用一个窗口的keyWindow财产来确定其状态。 大多数时候,你的应用程序的主窗口是关键窗口,但UIKit可能根据需要指定一个不同的窗口。
如果你需要知道哪些窗口是关键,观察UIWindowDidBecomeKeyNotification和UIWindowDidResignKeyNotification通知。 系统发送通知的应对关键窗口应用程序的变化。 迫使一个窗口成为关键,或强迫一个窗口辞职的关键地位,这个类的调用适当的方法。