UIWindow 中的 UIScreen 属性有啥用?
Posted
技术标签:
【中文标题】UIWindow 中的 UIScreen 属性有啥用?【英文标题】:What is the use of UIScreen property in UIWindow?UIWindow 中的 UIScreen 属性有什么用? 【发布时间】:2015-02-03 07:15:39 【问题描述】:我在查看 UIWindow
类引用,在那里我找到了默认为 [UIScreen mainScreen]
的 UIScreen
属性
@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
我们用AppDelegate
中的UIScreen
初始化UIWindow
对象
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]
我想知道为什么我们需要UIWindow
中的UIScreen
属性
【问题讨论】:
【参考方案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】:默认情况下,所有窗口都在主设备屏幕上创建。如果设备附加了其他屏幕,则将不同的屏幕对象分配给此属性会导致窗口显示在新屏幕上。
根据 Apple 文档:
在屏幕之间移动窗口是一项相对昂贵的操作,不应该在性能敏感的代码中完成。相反,建议您在第一次显示窗口之前更改屏幕。更改尚未订购到屏幕上的窗口的屏幕不会产生显着的额外成本。
【讨论】:
【参考方案3】:来自IOS开发者Library
self.window
假定为您的应用程序委托的声明属性,该属性配置为保留窗口对象。如果您正在为外部显示器创建一个窗口,则将其分配给不同的变量,并且您需要指定表示该显示器的非主 UIScreen
对象的边界。
创建窗口时,您应该始终将窗口的大小设置为屏幕的完整边界。您不应缩小窗口大小以容纳状态栏或任何其他项目。无论如何,状态栏始终浮动在窗口顶部,因此您应该缩小以适应状态栏的唯一内容是您放入窗口的视图。如果你使用视图控制器,视图控制器应该自动处理视图的大小。
【讨论】:
【参考方案4】:UIScreen 对象定义与基于硬件的显示相关的属性。 iOS 设备有一个主屏幕和零个或多个附加屏幕。使用此类为连接到设备的每个显示器获取屏幕对象。每个屏幕对象定义相关显示的边界矩形和其他有趣的属性,例如亮度。更多请参考docs
【讨论】:
【参考方案5】:您的应用程序只有一个 UIWindow
用于所有其他视图的绘制。申请时
开始UIWindow
覆盖整个屏幕空间。这就是您实例化的原因
UIWindow
您必须将其帧大小设置为主屏幕边界大小。
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds];
UIScreen
在这里的作用是什么?
UIScreen
表示设备屏幕的矩形。你的 UIScreen 更了解
您的设备屏幕属性,例如分辨率、像素纵横比、亮度、亮度。
另一方面,UIWindow
管理您的视图层次结构并帮助视图在屏幕上显示内容。 UIWindow
在初始化期间从UIScreen
绑定属性中获取它的框架并对其进行自我初始化,以便它可以从设备屏幕获得最大景观以将其提供给子视图。一旦初始化完成UIWindow
框架包括状态栏、绘图区和底部栏。
【讨论】:
以上是关于UIWindow 中的 UIScreen 属性有啥用?的主要内容,如果未能解决你的问题,请参考以下文章