首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏iOS开发攻城狮的集散地

    UIview 和CALayer、UIWindow

    UIwindow是UIView的子类,UIWindow的主要作用:一是提供一个区域来显示UIView,二是将事件(event)的分发给UIView,一个应用基本上只有一个UIWindow. iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了。 一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow。即没有UIWindow,就看不见任何UI界面。

    82060发布于 2018-05-22
  • 来自专栏xx_Cc的学习总结专栏

    iOS-UIWindow详解

    1.UIWindow简介 UIWindow是一种特殊的UIView,通常在一个app中至少会有一个UIWindow。 一个iOS程序之所以能显示在屏幕上,完全是因为它有UIWindow,也就是说,没有UIWindow就看不到任何UI界面。 状态栏和键盘都是特殊的UIWindow。 那么UIWindow是如何将View显示到屏幕上的呢 这里有三个重要的对象UIScreen,UIWindow,UIView。 这样View就显示在窗口上了 2.UIWindow的创建 1.UIWindow是什么时候创建的? 2.如何创建UIWindow?

    2.3K40发布于 2018-05-10
  • 来自专栏云原生布道专栏

    IOS开发系列——UIView专题之一: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

    1.5K30编辑于 2023-10-11
  • 来自专栏程序员——iOS开发

    iOS面试题:UIWindow,UIView,CALayer的区别

    UIWindow @interface UIWindow : UIView @property(nonatomic) UIWindowLevel windowLevel; iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了 主要作用是提供一个区域用来显示

    1K30发布于 2019-07-01
  • 来自专栏KyXu

    【iOS 开发】防止 UIWindow 延迟释放占用状态栏

    在展示 app 启动广告等情况下,我们可能需要在界面上叠加一个 UIWindow,但是实测情况下发现,由于 UIWindow 会被系统引用导致延迟释放,在 customWindow 实例被使用完之后,单纯 其中有可能出现的一个问题是:app 使用各个 VC 独立管理状态栏的方式时,我们通过 [[UIViewController alloc] init] 创建的 VC 是有状态栏的,这是当 app 需要展示的其他 UIWindow

    91620发布于 2019-04-11
  • 来自专栏非典型技术宅

    iOS四大对象之UIWindow及四大对象之间的关系1. UIWindow使用纯代码加载根控制器2. UIWindow的创建过程3. 四大对象之间的关系

    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,并显示出来

    2K30发布于 2018-06-28
  • 来自专栏進无尽的文章

    基础篇-UIApplication、UIWindow以及程序的启动流程看我就够了

    UIWindow是一种特殊的UIView,通常在一个程序中只会有一个UIWindow,但可以手动创建多个UIWindow,同时加到程序里面。 iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的View,最后将控制器的View添加到UIWindow上,于是控制器的View就显示在屏幕上了。 一个iOS程序之所以能显示在屏幕上,完全是因为它有UIWindow,也就是说,没有UIWindow就看不到任何UI界面。 状态栏和键盘都是特殊的UIWindow。 那么UIWindow是如何将View显示到屏幕上的呢? 这里有三个重要的对象UIScreen,UIWindow,UIView。 UIScreen对象识别物理屏幕连接到设备。 UIWindow的层级 UIWindow是有层级的,层级高的显示在最外面,当层级相同时,越靠后调用的显示在外面。

    2.1K20发布于 2018-09-12
  • 来自专栏宜达数字

    iOS开发--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

    1.4K20发布于 2020-06-02
  • 来自专栏陈满iOS

    iOS开发·UIWindow与视图层级调整技巧(makeKeyWindow,resignKeyWindow,makeKeyAndVisible,keyWindow,windowLevel,UIWind

    如果不想影响原来的UIWindow,可以考虑新建一个UIWindow并覆盖原来的UIWindow,并往新建的UIWindow上添加各种手势相关的视图及控制器。 但在手势验证完后,务必销毁这个自定义的UIWindow,否则可能导致看不见的UIWindow越积越多。 1. 如果,之前UIWindow的hidden = NO,设置新UIWindow的hidden将旧UIWindow覆盖后,旧UIWindow的hidden属性依旧为NO。 上述代码会将UIWindow绝对隐藏,不管有没其他UIWindow覆盖。当也没有其它非隐藏的UIWindow的时候,APP屏幕完全黑屏。 显示最上层的UIWindow以最后执行过该代码的UIWindow为准。 2).

    8.9K10发布于 2018-09-10
  • 来自专栏学海无涯

    iOS开发之仿支付宝后台隐藏信息

    毛玻璃界面需要能够覆载在最上面,可以通过UIWindow实现。 代码 主界面。 import UIKit class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? // 增加一个新的隐私UIWindow private var privacyWindow: UIWindow? windowScene else { return } privacyWindow = UIWindow(windowScene: windowScene makeKeyAndVisible() } // MARK: 隐藏隐私UIWindow private func hidePrivacyWindow() { privacyWindow

    28910编辑于 2025-02-10
  • 来自专栏学海无涯

    iOS开发之仿支付宝后台隐藏信息

    毛玻璃界面需要能够覆载在最上面,可以通过UIWindow实现。代码主界面。 import UIKitclass SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? // 增加一个新的隐私UIWindow private var privacyWindow: UIWindow? windowScene else { return } privacyWindow = UIWindow(windowScene: windowScene makeKeyAndVisible() } // MARK: 隐藏隐私UIWindow private func hidePrivacyWindow() { privacyWindow

    29710编辑于 2024-12-11
  • 来自专栏学海无涯

    iOS14开发-触摸与手势识别

    属性 (1)window:触摸时所处的 UIWindow。 (2)view:触摸时所处的 UIView。 (3)tapCount:短时间内点按屏幕的次数。可据此判断单击和双击操作。 UIApplication 取出最前面的事件传递给 UIWindowUIWindow 接收到事件后,首先判断自己能否响应触摸事件。 如果能,那么 UIWindow 会从后往前遍历自己的子 UIView,将事件向下传递。 -> Bool { } UIApplication 调用 UIWindow 的hitTest方法将触摸事件传递给 UIWindow,如果 UIWindow 能够响应触摸事件,则调用其子 UIView 的 (2)UIViewController:若当前响应者是 UIWindow 的rootViewController,则next是 UIWindow;若是被 present 显示的则next是presentingViewController

    3.3K20发布于 2021-05-10
  • 来自专栏落影的专栏

    iOS 事件传递和处理

    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方法会返回自己

    2.1K20发布于 2021-05-06
  • 来自专栏落影的专栏

    iOS横竖屏切换

    此时AppDelegate控制的是UIWindow层面的朝向,UIViewController控制的是VC层面的朝向。 通常一个App的界面层级是UIWindow=>RootViewController(容器vc)=>UIViewController(界面vc)。 假如只在UIWindow返回界面朝向也是允许的,就如同上面的实例分析中的push横屏。 在每次界面切换的时候,系统都会回调确认新的界面朝向,最终结果为UIWindow朝向、容器vc朝向、界面vc朝向三者的“与”值。那么假如这个值冲突了呢? 假如supportedInterfaceOrientationsForWindow一直返回的竖屏,那么后面VC设置横屏不会生效; 类似,假如UIWindow设置的是横屏,那么后面VC设置竖屏也不会生效

    3.5K20编辑于 2022-09-28
  • 来自专栏ShaoYL

    程序启动的完整过程

    程序启动完毕的时候,就会调用代理的application:didFinishLaunchingWithOptions:方法 在application:didFinishLaunchingWithOptions:中创建UIWindow 创建和设置UIWindow的rootViewController 显示窗口 3<1>.根据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

    1.8K150发布于 2018-05-11
  • 来自专栏Helloted

    UIViewController生命周期

    与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

    3.1K10编辑于 2022-06-06
  • 来自专栏iOS知识点

    iOS获取当前显示UIViewController视图

    - (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

    1.4K20发布于 2020-12-01
  • 来自专栏iOS开发日记

    iOS开发系列——纯代码实现iOS开发

    *)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为主窗口并可见。

    4.2K60发布于 2018-05-05
  • 来自专栏iOS 备忘录

    iOS 新创建项目中的SceneDelegate适配

    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?.

    4.3K21发布于 2021-04-21
  • 来自专栏iOS知识点

    -[AppController window]: unrecognized selector sent to instance 0x280c24420'

    崩溃效果图如下: 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

    1.3K20发布于 2020-12-09
领券