2

我正在查看UIWindow类参考,在那里我找到了UIScreen默认为的属性[UIScreen mainScreen]

@property(nonatomic,retain) UIScreen *screen NS_AVAILABLE_IOS(3_2);  
// default is [UIScreen mainScreen]. changing the screen may be an expensive operation and should not be done in performance-sensitive code

我们用in初始化UIWindow对象UIScreenAppDelegate

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]

我想知道为什么我们需要UIScreenUIWindow

4

5 回答 5

2

默认情况下,所有窗口都在主设备屏幕上创建。如果附加屏幕附加到设备,分配不同的屏幕对象到此属性会导致窗口显示在新屏幕上。

根据 Apple 文档:

在屏幕之间移动窗口是一项相对昂贵的操作,不应该在性能敏感的代码中完成。相反,建议您在第一次显示窗口之前更改屏幕。更改尚未订购到屏幕上的窗口的屏幕不会产生显着的额外成本。

于 2014-12-05T07:01:05.937 回答
2

UIScreen 指的是设备框架。

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIScreen_Class/index.html

您可以获得设备尺寸以查找设备 iPhone 4、iPhone 5、iPhone 6、iPhone 6+ 和 iPad

[[UIScreen mainScreen] bounds]//给你设备的大小。

您可以根据上述尺寸区分设备。

[[UIScreen mainScreen] bounds].size.width//给出设备的宽度 [[UIScreen mainScreen] bounds].size.height)//给出设备的高度。

或者你可以这样使用

CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];

希望对你有帮助...

于 2014-12-05T07:12:34.460 回答
0

您的应用程序只有一个UIWindow所有其他视图的绘图。当应用程序开始UIWindow覆盖整个屏幕空间。这就是实例化 UIWindow时必须将其帧大小设置为主屏幕边界大小的原因。

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds];

这里的作用是UIScreen什么?

UIScreen表示设备屏幕的矩形。您的 UIScreen 更了解您的设备屏幕属性,例如分辨率、像素纵横比、亮度、调光。

另一方面UIWindow管理您的视图层次结构并帮助视图在屏幕上显示内容。UIWindow在初始化期间,从绑定属性中获取它的框架UIScreen并对其进行自我初始化,以便它可以从设备屏幕获得最大的景观以将其提供给子视图。一旦初始化完成UIWindow框架包括状态栏加上绘图区加上底栏。

于 2014-12-05T08:08:01.033 回答
0

来自 IOS 开发者

self.window假定为您的应用程序委托的声明属性,该属性配置为保留窗口对象。如果您正在为外部显示器创建一个窗口,则将其分配给不同的变量,并且您需要指定UIScreen表示该显示器的非主对象的边界。

创建窗口时,您应该始终将窗口的大小设置为屏幕的完整边界。您不应缩小窗口大小以适应状态栏或任何其他项目。无论如何,状态栏始终浮动在窗口顶部,因此您应该缩小以适应状态栏的唯一内容是您放入窗口的视图。如果你使用视图控制器,视图控制器应该自动处理视图的大小。

于 2014-12-05T07:27:17.613 回答
0

UIScreen 对象定义与基于硬件的显示相关的属性。iOS 设备有一个主屏幕和零个或多个附加屏幕。使用此类为连接到设备的每个显示器获取屏幕对象。每个屏幕对象定义相关显示的边界矩形和其他有趣的属性,例如亮度。有关更多信息,请参阅此文档

于 2014-12-05T07:46:28.417 回答