我查看了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
属性
答案 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
管理您的视图层次结构并帮助视图在屏幕上显示内容。初始化期间UIWindow
从UIScreen
绑定属性中获取它的帧并自行初始化,以便它可以从设备屏幕获得最大格局以将其提供给子视图。初始化完成后UIWindow
框架包括状态栏加上绘图区域加上底栏。