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 ...
随机推荐
- STL 源代码剖析 算法 stl_algo.h -- rotate
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie rotate --------------------------------------- ...
- hdu1018 Big Number 斯特林公式 求N!的位数。
Big Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 修改Nginx与Apache上传文件大小限制
一.修改Nginx上传文件大小限制 我们使用ngnix做web server的时候,nginx对上传文件的大小有限制. 当超过大小的时候会报413错误. 这个时候我们要修改nginx参数. sudo ...
- freemark 页面静态化
1. 页面静态化是什么? 页面静态化有非常多含义,在WEB开发中.静态网页一般理解为站点中大部分超级链接所引用的页面是单独的HTML静态页面文件(如.htm..html等页面文件,html语言本身是静 ...
- Quartz定时任务学习(三)属性文件和jar
以下是我在应用的的一个基本配置: #---------调度器属性----------------org.quartz.scheduler.instanceName = TestSchedulerorg ...
- PostgreSQL tips
tip 1 在sql中我们可以设置一个列自增长identity(1,1),但在postgresql中却没有这个关键字定义.但postgresql也有实现相关功能,那就是只需要将该列数据类型标记为ser ...
- c/c++基本数据类型大小
各个类型的变量长度由编译器来决定(实际上与操作系统位数和编译器都有关)使用时可用sizeof()得到,当前主流编译器一般是32位或64位. 类型 32位 64位 char 1 1 short int ...
- FTP(File Transfer Protocol)是什么?
文件传输协议 FTP(File Transfer Protocol),是文件传输协议的简称.用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Application).用户可以通过 ...
- yii rule
https://blog.csdn.net/ljfrocky/article/details/46373691 http://www.yiichina.com/tutorial/997 http:// ...
- 1028 大数乘法 V2(FFT or py)
1028 大数乘法 V2 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出2个大整数A,B,计算A*B的结果. Input 第1行:大数A 第2行:大数B ...