UIWindow小结

来源:互联网 发布:php location地址跳转 编辑:程序博客网 时间:2024/05/22 07:54

引言:开发过程中有时候会需要一种情形例如百思不得姐,或者新浪微博的中间的发布按钮点击,弹出一个界面的场景,这种情况一种解决办法是直接搞一个控制器,然后点击的时候让根控制器直接moda出来这个控制器,设置一下不需要动画即可达到效果,但是这样的情况不能做到弹出的同时还能看到后面的原来的控制器的内容,因为moda的时候,之前的根控制器系统已经把他从窗口中移除了,但是还没有销毁,还在内存中,当弹出的消失的时候,系统再把根控制器移到窗口显示,这种情况下显然不可能看到根控制器的内容,因为他已经不在显示了,所以,如果想要半透明同时看到后天的跟控制器的内容的时候,显然不可以使用系统的moda。这时候一般有以下两种做法:

一:弹出的视图不用控制器来呈现,直接用一个UIView,然后把它加到keyWindow的上面,然后设置一下透明度即可做到不仅看到弹出视图,还可以看到后面的根控制器的内容,但是这种情况下,执行动画的过程中,要注意设置相应的载体的userInterFace为NO,这里不再介绍这个具体的设置,总体上要考虑的比较多,也比较繁琐。

二:这里是要引出的最终的办法——自定义UIwindow。优点一:不必考虑userinterFace 的繁琐设置,因为弹出一个UIWindow,盖在最上面的话,默认就可以拦截所有的点击,不会透传到下面的根控制器。优点二:可以掌握UIwindow的使用技巧啊,提示自己啊,哈哈哈~~~

下面首先介绍一下UIwindow的相关知识点;

UIWindow知识点一:

<span style="font-family:SimSun;font-size:14px;">    // 创建窗口    window_ = [[UIWindow alloc] init];    window_.frame = [UIScreen mainScreen].bounds;    window_.hidden = NO;</span>
<span style="font-family:SimSun;font-size:14px;">//注意上面的命名习惯,一般全局变量下划线在后面,成员变量下划线在前面,常量以工程前缀开始。</span>
注意,上面创建完成后,不需要添加到谁的上面,因为所有的UIView都是添加到UIWindow上面才可以显示的,UIWindow就是老大,没有必要添加到谁上面,直接设置hidden为No就可以显示了,并且通常要显示一个UIWindow时,一般是调用一个window的

[window_ makeKeyAndVisible]方法,其实这个方法的内部也就是做了两件事,一个是设置为主窗口,即可

[window_ makeKeyWindow],另一个就是设置hidden为NO。


UIWindow知识点二:

UIWindow有一个重要的属性,即窗口级别:windowLevel,取值是个枚举型的

<span style="color:#666600;">UIKIT_EXTERN const UIWindowLevel UIWindowLevelNormal;//默认UIKIT_EXTERN const UIWindowLevel UIWindowLevelAlert;//弹框UIKIT_EXTERN const UIWindowLevel UIWindowLevelStatusBar;//状态栏</span>
上面的三个值的级别 UIWindowLevelNormal < UIWindowLevelStatusBar < UIWindowLevelAlert
由此不难想到,其实状态栏就是一个小的UIWindow,设置一下窗口级别及frame,就做到了一直在那里显示,一些APP的在状态栏上面提示一些信息的实现手段其实就是自定义一个UIWindow,设置为UIWindowLevelStatusBar级别,然后位置设置好即可,能盖在原来的状态栏窗口上面是因为窗口有一个特性,就是后创建的会在最上面。另外,有些APP一个地方会有一个小的控件,不管你怎么弹框,怎么点击,它始终就在最上面,做法其实就是一个小UIWindow,级别为最高的UIWindowLevelAlert,这样就不会被遮挡了。

UIWindow知识点三:KeyWindow

  什么是keyWindow,官方文档中是这样解释的"The key window is the one that is designated to receive keyboard and other non-touch related events. Only one window at a time may be the key window." 翻译过来就是说,keyWindow是指定的用来接收键盘以及非触摸类的消息,而且程序中每一个时刻只能有一个window是keyWindow。


以上是这两天遇到的,总结一下,欢迎补充,如果有不对的地方也请多多指正。

    



0 0
原创粉丝点击