UIApplication/UIScreen/UIDevice平常用的很少;但毕竟是属于UIKit的重要组成部分,有必要了解一下。
UIDevice
通过UIDevice可以获取一个描述当前设备的单例。你可以获取以下设备相关的信息:设备名,设备型号,操作系统名称和版本。
我们还可以通过UIDevice实例检测设备的变化,比方横屏还是竖屏。Orientation属性代表了设备的方位,也可以通过注册UIDeviceOrientationDidChangeNotification通知消息来实时获取方位变化。在要使用这些数据前,必须先通过beginGeneratingDeviceOrientationNotifications方法调用开启该功能,然后调用endGeneratingDeviceOrientationNotifications禁用该功能。
此外,我们还能通过该实例获取关于电量状态变化的信息和通知信息(batteryState,batteryLevel)。还有就是关于接近传感数据(proximityState),接近传感器用于侦测用户是否拿着手机并紧贴在脸庞。同样的,只有在必要的时候才开启以上两项功能。
从iOS4.2开始,我们可以使用playInputClick实例方法响应用户自定义的键盘操作。
UIApplication
UIApplication是一个控制和协调运行中应用的中心。任何一个应用有且仅有一个UIApplication(或是一个UIApplication的一个子类)。一旦应用启动,UIApplicationMain就会被调用。在应用的某个任务中,这个函数会创建一个UIApplication单例。因此,你可以使用sharedApplication来获取该对象。
UIApplication的一个重要作用,就是它是所有用户操作事件传递链的开始。它也将由UIControl类传递给它的动作信息,进一步分发合适的目标类。此外,UIApplication对象维护了所有在当前APP中打开的windows的列表。应用对象一般都会有一个代理,用于处理应用运行时信息,如:应用开启,内存不足,应用关闭。因此应用有机会处理这些重要的信息。
APP之前可以通过openURL方法进行协作,如处理资源类似email和图像文件。比方,一个应用打开了调用了email URL,使用这个方法可以打开邮件客户端并显示信息。
UIApplication接口允许你管理设备相关的行为,具体如下:
在设备方位变化时,控制应用的反应;
临时阻断触摸事件。
开启和关闭接近传感器。
注册远程通知消息。
触发撤销或重做UI (applicationSupportsShakeToEdit)
检测一个安装好的应用是否可以打开一个URL(canOpenURL:).
在应用退到后台前,让它在后台还能再运行一下,完成一些收尾工作。
调度或中止本地通知。
协同处理接收到的远程控制事件。
重新恢复应用的状态。
绝大多数的应用不需要创建UIApplication子类,只需要使用UIApplication的代理函数管理系统和应用之间的交互。
如果你需要实现自定义一个事件或动作分发系统时,你才需要创建UIApplication子类。这样的话,你需要重写sendEvent或sendAction方法来自定义分发机制。我们尽量避免这种情况。
UIScreen
UIScreen对象定义了与硬件显示屏相关的属性。iOS设备有个主屏,外加0个或多个附屏。这个类可以获取所有与设备相关的屏幕。Screen类定义了bounds,以及其他属性如对比度。
在iOS8之前,screen的bounds属性一定反映了屏幕在竖屏情况的尺寸。旋转屏幕成为横屏或倒立情况都不会改变bounds属性。从iOS8开始,bounds属性参考设备方位的变化。依赖屏幕尺寸的应用可以使用fixedCoordinateSpace属性来修正点在坐标中的位置。
当用户连接或断开屏幕时,系统会发送通知给应用。利用代理可以长时间的监控通知信息。连接和断开的通知可能随时发生,也许这时你的应用在后台被挂起。在应用挂起时,通知会保存在队列中,直到你的app’在前台或后台又开始运行时。
但系统通知外部屏连接上时,你可以随意使用这个额外的屏幕空间。为使用这个空间,需要创建uiwindow对象,为新的screen进行赋值,显示到window上。屏幕支持多种分辨率,其中使用不同的像素宽高比。屏幕对象使用最普通的屏幕模式,你也可以设置适合你的模式。比方,如果你在游戏应用中使用OpenGL
ES,依据640*480设计了纹理,你可以更新屏幕模式为更高的分辨率。
总结:
1,开发中接触到UIApplication/UIScreen/UIDevice的机会不多;而且大多是简单的应用;对其有个大概了解即可;
2,以上内容都翻译自苹果官方内容,以下为链接
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIDevice_Class/index.html#//apple_ref/occ/cl/UIDevice
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplication_Class/index.html#//apple_ref/occ/cl/UIApplication
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIScreen_Class/index.html#//apple_ref/occ/cl/UIScreen
学的越多,做的越快;学的越多,做的越好;
版权声明:本文为博主原创文章,未经博主允许不得转载。