UIWindow中UIScreen属性的用途是什么?

时间:2014-12-05 06:53:39

标签: ios objective-c uiwindow uiscreen

我查看了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

我们使用UIWindow中的UIScreen初始化AppDelegate对象

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

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

中的UIWindow属性

5 个答案:

答案 0 :(得分:1)

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

根据Apple文档:

  

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

答案 1 :(得分:1)

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];

希望它对你有所帮助......

答案 2 :(得分:0)

来自IOS Developer Library

假设

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

您的应用只有一个UIWindow,其中包含所有其他观看次数。申请时 开始UIWindow涵盖整个屏幕空间。这是您实例化的原因 UIWindow您必须将其帧大小设置为主屏幕边界大小。

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

此处UIScreen的作用是什么?

UIScreen表示设备屏幕的矩形。您的UIScreen了解更多信息 您的设备屏幕属性,如分辨率,像素长宽比,亮度,调光。

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