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 ...
随机推荐
- c++ [wrong]simple "Garbage Collector"
In fact, Ptr alone can accomplish the task mentioned below. Implementation see Ptr.h, main2.cpp. In ...
- Java Stream 官方文档翻译
先立个flag https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html
- qt 4.8.5 vs 2012编译
Download Qt 4.8.3 source code from http://qt-project.org/downloads Go to mkspecs\win32-msvc2010. Ope ...
- 微信 oauth 授权3
3. 请求 2的url会得到 { "access_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2Cot ...
- (转)Unity3d游戏开场CG动画播放方式
1.在一个plane上播放 1 2 3 4 5 6 7 8 9 10 11 12 using UnityEngine; using System.Collections; public class M ...
- ios --跳转到支付宝
//跳转到支付宝 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request nav ...
- aspx.cs方法设置webmenthod特性接收ajax请求
cs代码: public partial class TelerikWebMethod : BasePage//System.Web.UI.Page { protected void Page_Loa ...
- jQuery整理笔记八----jQuery的Ajax
Ajax,我一直读的是"阿贾克斯",据当时大学老师讲该读音出处是依据当年风靡欧洲的荷兰足球俱乐部阿贾克斯的名字来的,我认为说法挺靠谱的. jQuery封装了Ajax的交互过程,用户 ...
- 5、easyUI-菜单与按钮
列出源码:求解 <html> <head> <meta http-equiv="Content-Type" content="text/ht ...
- std::condition_variable(2)复习
#include <iostream> // std::cout #include <thread> // std::thread, std::this_thread::yie ...