UIWindow

继承关系


一、配置UIWindow
1、windowlevei:@property(nonatomic) UIWindowLevel windowLevel
默认值为0.0
2、screen:@property(nonatomic, retain) UIScreen *screen
window当前显示的的屏幕
在默认情况下,所以的window都创建在设备主屏幕上,如果连接附加屏幕,可以设置window的screen属性,通常建议在首次显示window之前设置屏幕
3、rootViewController@property(nonatomic, retain) UIViewController *rootViewController
根视图控制器,默认值为nil
二、key window
1、key window:@property(nonatomic, readonly, getter=isKeyWindow) BOOL keyWindow
布尔值,指示接收器是否是应用程序的keywindow,同一时间只能有一个keywindow,用来接收键盘和其他非触摸相关的事件
2、- (void)makeKeyAndVisible
使window显示在同级别或低级别的window前,成为keywindow
3、- (void)becomeKeyWindow
自动调用通知window成为keywindow ,永远不会直接调用方法
4、- (void)makeKeyWindow
使接收者成为窗口
5、- (void)resignKeyWindow
接收者注销成为keywindow
三、坐标转换
1、- (CGPoint)convertPoint:(CGPoint)point toWindow:(UIWindow *)window
为接受者指定一个逻辑坐标系统中位置的点
返回值为转换到目标window坐标系的点
2、- (CGPoint)convertPoint:(CGPoint)point fromWindow:(UIWindow *)window
指定一个window坐标系中的点
返回值为转换到接收者坐标系的点
3、- (CGRect)convertRect:(CGRect)rect toWindow:(UIWindow *)window
为接受者指定一个逻辑坐标系统中位置的矩形
返回值为转换到目标window坐标系的矩形
4、- (CGRect)convertRect:(CGRect)rect fromWindow:(UIWindow *)window
指定一个window坐标系中的矩形
返回值为转换到接收者坐标系的矩形
四、发送事件
- (void)sendEvent:(UIEvent *)event
要处理的事件
五、常量
1、UIWindowLevel:
const UIWindowLevel UIWindowLevelNormal ;
const UIWindowLevel UIWindowLevelAlert ;
const UIWindowLevel UIWindowLevelStatusBar ;
优先级由低到高
NSString *const UIKeyboardFrameBeginUserInfoKey ;
键盘在屏幕坐标系中的起始坐标,在使用之前可能需要转换
NSString *const UIKeyboardFrameEndUserInfoKey ;
键盘在屏幕坐标系中的终止坐标,在使用之前可能需要转换
NSString *const UIKeyboardAnimationDurationUserInfoKey ;
键盘出现或收起时的动画持续时间double
NSString *const UIKeyboardAnimationCurveUserInfoKey ;
键盘出现或收起时的动画曲线NSNumber
五、通知
当UIWindow变为可见时发送,通知接收的对象是当前变为可见的window,不包含用户信息字典
当UIWindow变为不可见时发送,通知接收的对象是当前变为不可见的window,不包含用户信息字典
当UIWindow变为key时发送,不包含用户信息字典
当UIWindow已注销主窗口状态时发送,不包含用户信息字典
键盘将要显示时发送,通知对象为空,用户信息字典包含键盘信息,可以获取键盘的位置和尺寸信息
键盘显示后发送,通知对象为空,用户信息字典包含键盘信息,可以获取键盘的位置和尺寸信息
键盘将要消失时发送,通知对象为空,用户信息字典包含键盘信息,可以获取键盘的位置和尺寸信息
键盘消失后发送,通知对象为空,用户信息字典包含键盘信息,可以获取键盘的位置和尺寸信息
键盘frame将要发生变化时发送,通知对象为空,用户信息字典包含键盘信息,可以获取键盘的位置和尺寸信息
键盘frame发生变化后发送,通知对象为空,用户信息字典包含键盘信息,可以获取键盘的位置和尺寸信息
六、了解UIWindow和UIScreen
每个ios的应用程序有一个window显示在应用的用户接口,如果连接外部显示器,可以创建第二个window
1、在应用中window的作用
在ios应用中,window没有标题栏,关闭按钮或是其他的视觉修饰,用户不能关闭或移动应用的window,ios应用程序通过更改window内的视图而不是打开另一个新的window来显示新的内容。
UIWindow的重要作用:
包含应用程序的课件内容
在触摸事件处理中其关键作用
处理视图控制器的方向变化
2、window的root view controller包含的内容
一个window有一个包含所有代表app内容的其他view的root view controller
使用root view controller简化了改变界面的过程,想要改变展示的内容只需要替换root view controller
使用root view controller最简单的方式是使用
任何view controller都可以作为window的root view controller
3、Key Window接收的事件
Key Window是当前正在接收键盘和非触摸事件的窗口
4、检查外部显示器存在的方法
- (void)checkForExistingScreenAndInitializeIfPresent
{
    if ([[UIScreen screens] count] > 1)
    {
        // Get the screen object that represents the external display.
        UIScreen *secondScreen = [[UIScreen screens] objectAtIndex:1];
        // Get the screen's bounds so that you can create a window of the correct size.
        CGRect screenBounds = secondScreen.bounds;
 
        self.secondWindow = [[UIWindow alloc] initWithFrame:screenBounds];
        self.secondWindow.screen = secondScreen;
 
        // Set up initial content to display...
        // Show the window.
        self.secondWindow.hidden = NO;
    }
}
外部显示器连接和断开连接的通知
- (void)setUpScreenConnectionNotificationHandlers
{
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
 
    [center addObserver:self selector:@selector(handleScreenDidConnectNotification:)
            name:UIScreenDidConnectNotification object:nil];
    [center addObserver:self selector:@selector(handleScreenDidDisconnectNotification:)
            name:UIScreenDidDisconnectNotification object:nil];
}
- (void)handleScreenDidConnectNotification:(NSNotification*)aNotification
{
    UIScreen *newScreen = [aNotification object];
    CGRect screenBounds = newScreen.bounds;
 
    if (!self.secondWindow)
    {
        self.secondWindow = [[UIWindow alloc] initWithFrame:screenBounds];
        self.secondWindow.screen = newScreen;
 
        // Set the initial UI for the window.
    }
}
 
- (void)handleScreenDidDisconnectNotification:(NSNotification*)aNotification
{
    if (self.secondWindow)
    {
        // Hide and then delete the window.
        self.secondWindow.hidden = YES;
        self.secondWindow = nil;
 
    }
 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值