iOS UIWindow 与 windowLevel 学习
Pop几个关键点
- 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” 会使对象主窗口展示在最前端
- makeKeyAndVisible 方法使 对象window成为了 KeyWindow 但是如果 keyWindow 的windowLevel 小于其他的windowLevel 当前这个 KeyWindow 也不是在最最上层优先显示的
- UIWindow有三个层级,分别是Normal,StatusBar,Alert。 这三个层级的值 从左到右依次是0,1000,2000
- 根据UIWindow显示级别优先的原则,(UIWindow在显示的时候会根据UIWindowLevel进行排序的)即Level高的将“始终”排在所有windowLevel比他低的层级的前面显示出来。
- 系统默认的keyWindow 的windowLevel 是 Normal 那么 要优先显示创建的windowLevel 必须大于等于Normal 才会展示在上层。
- 创建 UIWindow 不用添加到任何的控件上面,直接创建完毕 即自动添加到UIWindow 上 创建方式 展示 销毁 都和 一般 UIView 的方式有区别 参见代码注释
示意图:

参见代码:
//
// HFWindowViewController.m
// SectionDemo
//
// Created by HF on 2017/5/25.
// Copyright © 2017年 HF-Liqun. All rights reserved.
// #import "HFWindowViewController.h" @interface HFWindowViewController () // 创建属性
@property (nonatomic, strong)UIWindow *myWindow1; @end @implementation HFWindowViewController - (void)viewDidLoad {
[super viewDidLoad]; // 创建测试按钮
UIButton *tempBtn = [UIButton buttonWithType:UIButtonTypeSystem];
tempBtn.frame = CGRectMake(,, self.view.frame.size.width - * , );
[tempBtn setTitle:@"点我创建一个window" forState:UIControlStateNormal];
// 通过按钮的点击事件生成不同windowLevel级别的window
[tempBtn addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:tempBtn];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} #pragma mark- event - (void)clickBtn:(id)sender
{
[self test1];
} - (void)clickWindowBtn:(id)sender
{
//window 销毁
self.myWindow1.hidden = YES; //可有可无 看 UI效果
self.myWindow1 = nil; // 这个方法是真正移除 UIWindow
} #pragma mark - private /**
*
*1、创建 window 不用添加到任何的控件上面,直接创建完毕 即自动添加到window 上
*2、创建一个比默认window的windowLevel大的window来看一下什么效果,效果是会盖在原来的window上面
*/
- (void)test1
{
// 创建window
if (self.myWindow1 == nil) { if (IOS9) {//>=iOS9
self.myWindow1 = [UIWindow new]; // 以后 默认了 window的大小
} else {
self.myWindow1 = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];//这么写在哪个版本系统上,一点毛病都没有
} UIButton *windowBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[windowBtn setTitle:@"点我 销毁黄色 window" forState:UIControlStateNormal];
windowBtn.backgroundColor = [UIColor redColor];
windowBtn.frame = CGRectMake(, , self.view.frame.size.width - * , );
[windowBtn addTarget:self action:@selector(clickWindowBtn:) forControlEvents:UIControlEventTouchUpInside];
[self.myWindow1 addSubview:windowBtn]; }
// 设置window的颜色,这里设置成黄色,方便查看window的层级关系
self.myWindow1.backgroundColor = [UIColor yellowColor];
// 设置 window 的 windowLevel
self.myWindow1.windowLevel = UIWindowLevelStatusBar; //TODO: Normal,StatusBar,Alert 分别 为 0,1000,2000 可以修改这里体验 层级变化 对 展示 window的影响
self.myWindow1.hidden = NO;
[self.myWindow1 makeKeyAndVisible]; //成为keyWindow
} @end
iOS UIWindow 与 windowLevel 学习的更多相关文章
- [iOS]关于零基础学习iOS开发的学习方法总结
		关于零基础学习iOS开发的学习方法总结 最近很多零基础来参加蓝鸥培训的学生经常会问到一些学习方法的问题,就如下我自己见过的好的学习方法一起讨论一下. 蓝鸥iOS开发技术的学习路线图 程序员的主要工作是 ... 
- ios和android一并学习的体会
		如果说为什么要同时学习这两种不同的移动平台,其实有一定的“闲”的因素在里面. 相对于ios,android我是早半年接触的.最开始学习的时候也就是j2ee学习的延续,通过看视频连带看书学了大概一个月的 ... 
- IOS开发-OC学习-常用功能代码片段整理
		IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是 ... 
- IOS开发-UI学习-sqlite数据库的操作
		IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这 ... 
- UIWindow的windowLevel详解
		UIWindow的windowLevel详解 
- iOS  copy 和 mutableCopy 学习
		(参考 iOS 52个技巧学习心得笔记 第二章 对象 , 消息, 运行期)的对象部分 关于Copy 有个经典问题”大部分的时候NSString的属性都是copy,那copy与strong的情况下到底 ... 
- IOS开发之XCode学习007:UIWindow对象
		此文学习来源为:http://study.163.com/course/introduction/1002858003.htm #import "AppDelegate.h" @i ... 
- ios UIWindow 错误使用导致无法接收motionEnded(摇一摇)函数
		今天遇到一个问题,第一次运行程序时,- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event函数无法调用,第二次就好了 ... 
- iOS - UIWindow
		前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIWindow : UIView @available(iOS 2.0, *) public class UIWi ... 
随机推荐
- codeblocks如何watch指针
			如果这个指针是指向一个一维数组,那么在watch窗口中右击并选择Dereference,会看到数组的第一个元素 如果这个指针是指向一个struct,那么在watch窗口中右击并选择Dereferenc ... 
- mysql存在就更新,不存在就新增
			INSERT INTO newest_log_operation( ACTION, OPERATION, KEY_VALUE, BUS_KEY, CONTENT, USER_ID, VERSIO ... 
- cmake工程使用distcc
			distcc可以加速编译,但是遇到cmake可能就需要处理下. 问题 distcc在 /usr/lib/distcc 中放了各编译器的soft link(如cc/gcc等等),如果 /usr/lib/ ... 
- Java正则表达式之Matcher类的find和matches方法的区别
			讨论整个问题之前,先看个例子: 从上面的例子可以看出 matches()是整个字符串完全匹配时,才会返回true 而find()则只需要字符串中,找到某部分的子字符串匹配则返回true ... 
- Div+CSS布局入门教程
			http://www.blueidea.com/tech/site/2006/3574.asp ———————————————————————————————————————————————————— ... 
- Nginx区分PC或手机访问不同网站
			近几年来,随着手机和pad的普及,越来越多的用户选择使用移动客户端访问网站,而为了获取更好的用户体验,就需要针对不同的设备显示出最合适的匹配,这样就是近年来流行的“响应式web设计”. 响应式web设 ... 
- DeepLearnToolbox-master代码学习笔记
			卷积神经网络(CNN)博大精深,网上资料浩如烟海,让初学者无从下手.笔者以为,学习编程还是从代码实例入们最好.目前,学习CNN最好的代码实例就是,DeepLearnToolbox-master,不用装 ... 
- Web Services 平台元素
			Web Services 拥有三种基本的元素:SOAP.WSDL 以及 UDDI. 什么是 SOAP? 基本的 Web services 平台是 XML + HTTP. SOAP 指简易对象访问协议 ... 
- jetty访问jsp页面出现异常:org.apache.jasper.JasperException: PWC6345: A full JDK (not just JRE) is required解决
			今天在jetty下配置一个jsp模版的报表页面,报如下异常信息: org.apache.jasper.JasperException: PWC6345: There is an error in ... 
- Android ADB工具-操作手机和获取手设备信息(四)
			Android ADB工具-操作手机和获取手设备信息(四) 标签(空格分隔): Android ADB 6. 其它命令 命令 功能 adb shell input text <content&g ... 
