UIwindow是UIView的子类,UIWindow的主要作用:一是提供一个区域来显示UIView,二是将事件(event)的分发给UIView,一个应用基本上只有一个UIWindow....iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了。...一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow。即没有UIWindow,就看不见任何UI界面。
1.UIWindow简介 UIWindow是一种特殊的UIView,通常在一个app中至少会有一个UIWindow。...一个iOS程序之所以能显示在屏幕上,完全是因为它有UIWindow,也就是说,没有UIWindow就看不到任何UI界面。 状态栏和键盘都是特殊的UIWindow。...那么UIWindow是如何将View显示到屏幕上的呢 这里有三个重要的对象UIScreen,UIWindow,UIView。...这样View就显示在窗口上了 2.UIWindow的创建 1.UIWindow是什么时候创建的?...2.如何创建UIWindow?
UIView专题 1UIWindow 1.1UIWindow简介 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow。...一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow。也就说,没有UIWindow,就看不见任何UI界面。...补充:UIWindow是创建的第一个视图控件(创建的第一个对象是UIapplication)如下图: 添加 先创建UIwindow,再创建控制器,创建控制器的view,然后将控制器的view添加到UIWindow...3.在有storyboard的项目中,UIWindow是如何创建的? 为什么创建一个storyboard,没有看到创建uiwindow的过程? 它其实是把创建UIWindow的过程给屏蔽起来了。...提示:如果某个UIWindow内部的文本框不能输入文字,可能是因为这个UIWindow不是keyWindow。 (3)view.window获得某个UIView所在的UIWindow。
UIWindow @interface UIWindow : UIView @property(nonatomic) UIWindowLevel windowLevel;...iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了 主要作用是提供一个区域用来显示
在展示 app 启动广告等情况下,我们可能需要在界面上叠加一个 UIWindow,但是实测情况下发现,由于 UIWindow 会被系统引用导致延迟释放,在 customWindow 实例被使用完之后,单纯...其中有可能出现的一个问题是:app 使用各个 VC 独立管理状态栏的方式时,我们通过 [[UIViewController alloc] init] 创建的 VC 是有状态栏的,这是当 app 需要展示的其他 UIWindow
UIWindow/使用纯代码加载根控制器 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow -iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的...view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了 创建的第一个对象是:UIApplication 一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow...也就说,没有UIWindow,就看不见任何UI界面 1.1 手工创建一个UIWindow - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions...:(NSDictionary *)launchOptions { //创建窗口,根据屏幕大小设置 UIWindow *window = [[UIWindow alloc] initWithFrame...主窗口同一时刻只能有一个UIWindow *keyW = application.keyWindows; 1.2 对window进行操作 // 让当前UIWindow变成keyWindow,并显示出来
UIWindow是一种特殊的UIView,通常在一个程序中只会有一个UIWindow,但可以手动创建多个UIWindow,同时加到程序里面。...iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的View,最后将控制器的View添加到UIWindow上,于是控制器的View就显示在屏幕上了。...一个iOS程序之所以能显示在屏幕上,完全是因为它有UIWindow,也就是说,没有UIWindow就看不到任何UI界面。 状态栏和键盘都是特殊的UIWindow。...那么UIWindow是如何将View显示到屏幕上的呢? 这里有三个重要的对象UIScreen,UIWindow,UIView。 UIScreen对象识别物理屏幕连接到设备。...UIWindow的层级 UIWindow是有层级的,层级高的显示在最外面,当层级相同时,越靠后调用的显示在外面。
Paste_Image.png UIWindow UIWindow是一种特殊的View 1.iOS启动完毕后,创建的第一个视图控件就是UIWindow。...2.接着创建控制器的View, 3.然后将控制器的view添加到UIWindow上 4.于是控制器的View就显示在屏幕上了。...5.也就是说没有UIWindow,就没有UI界面 程序启动原理: 执行main 执行UIAPPLICATIONMain 1.创建UIApplication 2.创建UIApplicationDelegate
如果不想影响原来的UIWindow,可以考虑新建一个UIWindow并覆盖原来的UIWindow,并往新建的UIWindow上添加各种手势相关的视图及控制器。...但在手势验证完后,务必销毁这个自定义的UIWindow,否则可能导致看不见的UIWindow越积越多。 1....如果,之前UIWindow的hidden = NO,设置新UIWindow的hidden将旧UIWindow覆盖后,旧UIWindow的hidden属性依旧为NO。...上述代码会将UIWindow绝对隐藏,不管有没其他UIWindow覆盖。当也没有其它非隐藏的UIWindow的时候,APP屏幕完全黑屏。...显示最上层的UIWindow以最后执行过该代码的UIWindow为准。 2).
属性 (1)window:触摸时所处的 UIWindow。 (2)view:触摸时所处的 UIView。 (3)tapCount:短时间内点按屏幕的次数。可据此判断单击和双击操作。...UIApplication 取出最前面的事件传递给 UIWindow。 UIWindow 接收到事件后,首先判断自己能否响应触摸事件。...如果能,那么 UIWindow 会从后往前遍历自己的子 UIView,将事件向下传递。...-> Bool { } UIApplication 调用 UIWindow 的hitTest方法将触摸事件传递给 UIWindow,如果 UIWindow 能够响应触摸事件,则调用其子 UIView 的...(2)UIViewController:若当前响应者是 UIWindow 的rootViewController,则next是 UIWindow;若是被 present 显示的则next是presentingViewController
App内:子线程接收事件->主线程封装事件->UIWindow启动hitTest确定目标视图->UIApplication开始发送事件->touch事件开始回调。...UIKit会从UIWindow开始寻找目标视图,先调用UIWindow的hitTest方法询问是否有响应的视图,hitTest方法首先会先调用UIWindow的pointInside方法询问是否在点击范围内...a.如果pointInside方法返回NO,则证明UIWindow无法响应该事件,hitTest方法会马上返回nil; b.如果pointInside方法返回YES,则证明UIWindow可以响应该事件...,hitTest方法会接着调用UIWindow子视图的hitTest方法。...b1.如果子视图hitTest方法如果有返回视图,则UIWindow的hitTest方法会返回该视图; b2.如果所有子视图hitTest方法都没有返回视图,则UIWindow的hitTest方法会返回自己
此时AppDelegate控制的是UIWindow层面的朝向,UIViewController控制的是VC层面的朝向。...通常一个App的界面层级是UIWindow=>RootViewController(容器vc)=>UIViewController(界面vc)。...假如只在UIWindow返回界面朝向也是允许的,就如同上面的实例分析中的push横屏。...在每次界面切换的时候,系统都会回调确认新的界面朝向,最终结果为UIWindow朝向、容器vc朝向、界面vc朝向三者的“与”值。那么假如这个值冲突了呢?...假如supportedInterfaceOrientationsForWindow一直返回的竖屏,那么后面VC设置横屏不会生效; 类似,假如UIWindow设置的是横屏,那么后面VC设置竖屏也不会生效
与KeyWindow 1、UIWindow 在iOS App中,UIWindow是最顶层的界面内容,我们使用UIWindow和UIView来呈现界面。...UIWindow并不包含任何默认的内容,但是它被当作UIView的容器,用于放置应用中所有的UIView。...从继承关系来看,UIWindow继承自UIView,所以UIWindow除了具有UIView的所有功能之外,还增加了一些特有的属性和方法,而我们最常用的方法,就是在App刚启动时,调用UIWindow的...2、UIWindow的主要作用有: 1.作为UIView的最顶层容器,包含应用显示所有的UIView; 2.传递触摸消息和键盘事件给UIView; 把view添加到uiwindow 3、把view...添加到uiwindow上面 (1)直接将控制器的view添加到UIWindow中,并不理会它对应的控制器 [self.window addsubview:vc.view]; (2)设置uiwindow
- (UIViewController *)getCurrentVC { UIViewController *result = nil; UIWindow * window = [[UIApplication...UIWindowLevelNormal) { NSArray *windows = [[UIApplication sharedApplication] windows]; for(UIWindow...window.rootViewController; } return result; } 第二种写法: //登录接口 UIViewController *juheVC = nil; UIWindow...= UIWindowLevelNormal) { NSArray *windows = [[UIApplication sharedApplication] windows]; for(UIWindow
程序启动完毕的时候,就会调用代理的application:didFinishLaunchingWithOptions:方法 在application:didFinishLaunchingWithOptions:中创建UIWindow...创建和设置UIWindow的rootViewController 显示窗口 3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard...) 创建UIWindow 创建和设置UIWindow的rootViewController 显示窗口 窗口(UIWindow) 一种特殊的UIView,一个app中至少有一个UIWindow iOS...启动完毕后创建的第一个视图就是UIWindow 接着创建控制器,再把控制器的View加到UIWindow上显示出来 在- didFinishLaunchingWithOptions:方法中代码创建控制器...//创建窗口 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; //创建跟控制器 UIViewController
*)launchOptions { //设置window属性(在KCAppDelegate中定义的window属性),初始化windows的大小和位置 self.window = [[UIWindow...UIView就是指界面可见的控件元素,所有的控件最终都继承自UIView,UIView中还可以添加其他UIView(通过addSubView方法); 在一个iOS应用中必须有一个主窗口UIWindow(...理论上也可以有多个UIWindow但是只有一个是主Window,而且只有主Window可以和用户交互),UIWindow也是继承自UIView,它拥有UIView的所有属性、方法; 在UIWindow中必须有一个根控制器...,这个控制器距离UIWindow是最近的;设置一个控制器为根控制器和直接通过addSubView添加控制器的视图(view属性)到window并不完全一样(例如如果仅仅添加控制器视图那么应用虽然可以显示但是不支持旋转...对象,同时把我们的视图控制器KCMainController设置为UIWindow的根视图控制器,然后设置这个UIWindow为主窗口并可见。
AppDelegate.Swift import UIKit @main class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow...self.window = UIWindow(frame: UIScreen.main.bounds) self.window?....UIWindowSceneDelegate { xxx } class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow...available(iOS 13.0, *) { // 不需要处理,走SceneDelegate } else { // 初始化UIWindow...window = UIWindow.init() window?.
崩溃效果图如下: image.png 如果出现这个问题,那么首先恭喜你,不是渠道的SDK太旧了,不兼容版本,而是CP游戏工程太老了 解决方法如下: 1:游戏工程里APPcontroller.h文件要进行修改UIWindow...viewController; id reachAbilityObj; // id jpushObject; } //根window @property (strong, nonatomic) UIWindow...; 修改后效果图: image.png 2:游戏工程里APPcontroller.m文件要进行修改对应的APPwindow 下面是我的代码,大家对应的代码不同,自己相对应修改 _window = [[UIWindow...alloc] initWithFrame: [[UIScreen mainScreen] bounds]]; // window = [[UIWindow alloc] initWithFrame
*)session options:(UISceneConnectionOptions *)connectionOptions API_AVAILABLE(ios(13.0)){ UIWindow...* aWindow = [[UIWindow alloc] initWithWindowScene:scene]; aWindow.rootViewController = [[LoginViewController...app = [UIApplication sharedApplication].delegate; [app setWindow:self.window]; } @end 上篇文章我们分析到UIWindow...Swift版本我们就不详细说了代码逻辑依然是OC的 class SceneDelegate: UIResponder,UIWindowSceneDelegate { var window: UIWindow...session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { var aWindow = UIWindow
传递链: 由系统向离用户最近的view传递: UIApplication -> UIWindow -> RootViewController -> View -> ... -> Button 响应链:...由离用户最近的view向系统响应: Button -> View -> ... -> RootViewController -> UIWindow -> UIApplication ---- 事件的传递及响应过程...当发生touch后, 系统会将touch以UIEvent的方式, 加入到UIApplication管理的事件任务队列中(FIFO) UIApplication将出入任务队列最前端的事件向下传递, 传递给UIWindow...UIWindow将事件向下传递给RootVC RootVC将事件向下传递给View 调用View的hitTest方法, 判断当前View是否可响应事件, 再调用pointInside判断触摸点是否在自己身上
领取专属 10元无门槛券
手把手带您无忧上云