UIWindow
UIWindow : UIView
Screen - Window - ViewController
一般 APP 一个 window,也可以手动添加多个,常见的 HUD 就是 window 方式;
基本
- 创建window,并且绑定一个 VC,然后使 window 可见,这是最常见的了;
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
ViewContoller *rootVC = [[ViewContoller alloc] init];
[self.window setRootViewController:rootVC];
[self.window makeKeyAndVisible];
属性
self.window.screen;
self.window.isKeyWindow;
多 window 切换
- 默认同级别的 window
// window2 初始略,此处为注册 window,但是不显示
[self.window2 makeKeyWindow];
// 2 个 window 相互切换
[[UIApplication sharedApplication].windows enumerateObjectsUsingBlock:^(__kindof UIWindow * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (obj != [UIApplication sharedApplication].keyWindow) {
[obj makeKeyAndVisible];
*stop = YES;
}
}];
- 不同级别的 window
self.window.windowLevel = UIWindowLevelNormal;
UIKIT_EXTERN const UIWindowLevel UIWindowLevelNormal;// 0
UIKIT_EXTERN const UIWindowLevel UIWindowLevelAlert;// 2000
UIKIT_EXTERN const UIWindowLevel UIWindowLevelStatusBar;// 1000
也可以自定义,级别越大,在 makeKeyAndVisible 后,处于上方(就是 z-index)
但是不知道这么去,注销释放 makeKeyAndVisible 的 window
相对位置转换
// window2 中的 (100,50)相对于 window 中的 point位置;p1=(200,150)
CGPoint p1 = [self.window2 convertPoint:CGPointMake(100, 50) toWindow:self.window];
// window 中的 (100,50)相对于 window2 中的 point位置;p2=(0,-50)
CGPoint p2 = [self.window2 convertPoint:CGPointMake(100, 50) fromWindow:self.window];
CGRect 类似;
通知
- window 通知
UIKIT_EXTERN NSNotificationName const UIWindowDidBecomeVisibleNotification;
UIKIT_EXTERN NSNotificationName const UIWindowDidBecomeHiddenNotification;
UIKIT_EXTERN NSNotificationName const UIWindowDidBecomeKeyNotification;
UIKIT_EXTERN NSNotificationName const UIWindowDidResignKeyNotification;
- 键盘通知
UIKIT_EXTERN NSNotificationName const UIKeyboardWillShowNotification;
UIKIT_EXTERN NSNotificationName const UIKeyboardDidShowNotification;
UIKIT_EXTERN NSNotificationName const UIKeyboardWillHideNotification;
UIKIT_EXTERN NSNotificationName const UIKeyboardDidHideNotification;
UIKIT_EXTERN NSNotificationName const UIKeyboardWillChangeFrameNotification;
UIKIT_EXTERN NSNotificationName const UIKeyboardDidChangeFrameNotification;
// userInfoKey
UIKIT_EXTERN NSString *const UIKeyboardFrameBeginUserInfoKey; // NSValue of CGRect
UIKIT_EXTERN NSString *const UIKeyboardFrameEndUserInfoKey; // NSValue of CGRect
UIKIT_EXTERN NSString *const UIKeyboardAnimationDurationUserInfoKey; // NSNumber of double
UIKIT_EXTERN NSString *const UIKeyboardAnimationCurveUserInfoKey; // NSNumber of NSUInteger (UIViewAnimationCurve)
UIKIT_EXTERN NSString *const UIKeyboardIsLocalUserInfoKey; // NSNumber of BOOL
事件
[self.window sendEvent:event];
这个有待深入研究 event