2014-12-05 38 views
1

我一直在寻找在UIWindow类引用和在那里我找到了UIScreen属性,默认为[UIScreen mainScreen]UIWindow中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 

我们initiailise与UIScreenUIWindow对象AppDelegate

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

我想知道为什么我们需要UIScreen财产UIWindow

回答

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] //插上U设备的尺寸。

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

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

或者你可以用这种方式

CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame]; 

希望它可以帮助你用...

+0

感谢您的解释 – vinay 2014-12-19 08:42:03

1

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

按照苹果的文档:

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

0

从iOS开发者Library

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

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

0

甲UIScreen对象定义了与基于硬件的显示器相关联的属性。 iOS设备有一个主屏幕和零个或多个连接的屏幕。使用这个类来获取连接到设备的每个显示器的屏幕对象。每个屏幕对象都定义了相关显示的边界矩形和其他有趣的属性,例如其亮度。欲了解更多请参阅本docs

0

你的应用程序只有一个UIWindow所有其他观点的平局的。当应用程序 开始时UIWindow覆盖整个屏幕空间。这是当你实例 UIWindow你必须设置它的帧大小主屏幕的界限大小的原因。

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

什么是UIScreen这里的作用是什么?

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

在对方UIWindow管理您的视图层次,并帮助视图来显示在屏幕上的内容。在初始化过程中UIWindow得到它的从UIScreen绑定属性帧和初始化它的自我,以便它可以具有从设备屏幕最大的景观把它给子视图。一旦初始化完成UIWindow框架包括状态栏加绘图区域加底栏。