【问题标题】: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 属性

【问题讨论】:

    标签: ios objective-c 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 框架包括状态栏、绘图区和底部栏。

            【讨论】:

              猜你喜欢
              • 2011-12-15
              • 1970-01-01
              • 1970-01-01
              • 2011-07-24
              • 2012-01-02
              • 1970-01-01
              • 2014-11-10
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多