关于创建Window窗口以及MakeKeyAndViseble 和MakeKeyWindow,lkeywindow
window窗口是用户第一直观感觉的到的界面也是我们需要进行的后期搭建的基础,
有时需要开启多个窗口的数据问题,就涉及到创建多个窗口,
keywindow是什么?我们窗口window创建后,保存在我们的可以windows数组中,会按顺序保存在数组中。我们需要看见我们的窗口就需要进行对窗口的密钥 *** 作和显示 *** 作,那么就需要调用MakeKeyAndViseble ,最近调用后的就会将当前窗口设置成keywindow,相当于当前现实的主窗口(注意是“最近”调用的)
比如我们需要实现一个悬浮的在页面上最顶层的控件不受页面切换影响
我们不想改变上面的keywindow作为主窗口,且需要开启另外的OthereWindow,我们可以让Otherwindow悬浮在上层,那么我们怎么办,我们可以对OtherWindow调用makeKeyWindow,先设置密钥 *** 作,然后对OtherWindow.Hidden=NO那么窗口OtherWindow将可以显示且不会设置成keywindow。那么我以依旧可以进行window *** 作
前言:大家都知道在安卓上的window 有相关的level,那么iOS上是不是也有相关的level呢?其实是有的只不过iOS的开发不常用而已
先简单说一下UIWindow的几个方法
这样建立的window 的windowLevel 是 0 hidden 是 YES
显示一个UIWindow,同时设置为keyWindow,并将其显示在 同一windowLevel 的其它任何UIWindow之上,此时其Hidden会自动变成NO
官方解释 // convenience. most apps call this to show the main window and also make it key. otherwise use view hidden property
设置keyWindow与否并不当前影响视图层级显示,仅来接收键盘及其它非触摸事件。如果没有专门设置过keyWindow的hiden为NO,而且也没有其它非隐藏的UIWindow,那么APP会黑屏
如果想解除keywindow
resignKeyWindow
[[UIApplication sharedApplication] keyWindow]获取正在显示的UIWindow是极其不准确的,下面会有例子解释这个概念
通过log 可以发现新的window 追加在了数组后面 0x10060be90 level 0.0 (新建的normal window)
在normal上新建一个statusBar 的window
通过log 可以发现新的window 追加在了数组后面 0x100320be0 (level 1000.0) 现在数组中是4个数据
那么如果接下来增加一个 level 是normal的window 如何
通过log 可以发现新的window 追加在了数组多了一个 0x10031fd10 (level 0.0) 并且是追加在了 0x10060be90 level 0.0 后面 但是最后打印的依旧是 0x100320be0 ,由此可见,要优先显示创建的windowLevel 必须大于等于当前的level才会展示在上层。
注意
以上的keyWindow都是 **0x1003093f0 **如下图
结论
2.创建一个window 默认使用UIWindowLevelNormal 0.0 系统默认的keyWindow 的windowLevel 是 Normal 那么 要优先显示创建的windowLevel 必须大于等于当前的window level 才会展示在上层。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)