相关文章
UIScreen
一个UIScreen对象定义了一个基于硬件的显示相关的属性。iOS设备有一个主屏幕和零个或多个连接的屏幕。一个TVOS装置具有电视连接到设备的主屏幕。使用UIScreen获取连接到设备的每个显示器的屏幕对象。每个UIScreen定义了,用于显示的边界和其他有趣的属性,如它的亮度。
概要
在iOS 8之前,屏幕的bounds总是竖屏尺寸。旋转设备为横屏或倒置的方向并没有改bounds。在iOS 8后,屏幕上的bounds属性考虑了屏幕的界面方向考虑。这种行为意味着竖屏的bounds和横屏的bounds不同啦。依赖于屏幕尺寸的应用程序可以在fixeDcoordinateSpace属性做出计算和修改。处理屏幕连接和断开通知
当用户连接或断开一个屏幕,在iOS设备上,系统发出相应的通知给你的应用程序。始终使用长寿命对象观察,来自应用程序的的通知,例如app delegate。连接和断开通知可以随时来,即使您的应用程序在后台。如果应用程序在通知到达时是挂起状态,则通知将一直排队,直到应用程序在前台或后台再次运行时,才将其发送给观察者。当你收到一个新的外部显示器连接的通知时,只要你可以使用额外的屏幕空间。要使用该空间,创建一个窗口对象,将新屏幕分配给它的屏幕属性,并显示窗口。这样做会导致窗口的内容将显示在显示时,您的应用程序是在前台。如果不为额外的屏幕创建窗口,或者创建窗口而不显示窗口,则在外部显示上显示为黑色。
UIScreen显示两种处理方法进行连接和断开的通知。连接处理程序创建一个辅助窗口,将其与新连接的屏幕,让一个应用程序的视图控制器(通过自定义视图属性表示)向窗口添加一些内容,并显示它。断线处理释放窗口并通知主视图控制器,这样就可以相应地调整其表现。
- (void)handleScreenConnectNotification:(NSNotification*)aNotification {
UIScreen* newScreen = [aNotification object];
CGRect screenBounds = newScreen.bounds;
if (!_secondWindow) {
_secondWindow = [[UIWindow alloc] initWithFrame:screenBounds];
_secondWindow.screen = newScreen;
// Set the initial UI for the window and show it.
[self.viewController displaySelectionInSecondaryWindow:_secondWindow];
[_secondWindow makeKeyAndVisible];
}
}
- (void)handleScreenDisconnectNotification:(NSNotification*)aNotification {
if (_secondWindow) {
// Hide and then delete the window.
_secondWindow.hidden = YES;
[_secondWindow release];
_secondWindow = nil;
// Update the main screen based on what is showing here.
[self.viewController displaySelectionOnMainScreen];
}
}
配置外部显示的屏幕模式
许多屏幕支持多个分辨率,其中一些使用不同的像素纵横比。屏幕对象默认使用最常见的屏幕模式,但您可以将该模式更改为更适合您的内容。例如,如果您使用的是OpenGL ES和你的纹理设计为640×480像素的屏幕实现一个游戏,你可以更改默认分辨率较高的屏幕的屏幕模式。如果您计划使用非默认的屏幕模式,应用模式给UIScreen对象之前将屏幕和窗口。的UIScreenMode类定义了一个单屏模式的属性。你可以得到一个列表,从availableModes属性屏幕支持模式和遍历一个符合你需要的列表。