Pop几个关键点

  1. 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” 会使对象主窗口展示在最前端
  2.  makeKeyAndVisible  方法使 对象window成为了 KeyWindow  但是如果 keyWindow 的windowLevel 小于其他的windowLevel 当前这个 KeyWindow 也不是在最最上层优先显示的
  3. UIWindow有三个层级,分别是Normal,StatusBar,Alert。 这三个层级的值 从左到右依次是0,1000,2000
  4. 根据UIWindow显示级别优先的原则,(UIWindow在显示的时候会根据UIWindowLevel进行排序的)即Level高的将“始终”排在所有windowLevel比他低的层级的前面显示出来。
  5. 系统默认的keyWindow 的windowLevel 是 Normal 那么 要优先显示创建的windowLevel 必须大于等于Normal 才会展示在上层。
  6. 创建 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 学习的更多相关文章

  1. [iOS]关于零基础学习iOS开发的学习方法总结

    关于零基础学习iOS开发的学习方法总结 最近很多零基础来参加蓝鸥培训的学生经常会问到一些学习方法的问题,就如下我自己见过的好的学习方法一起讨论一下. 蓝鸥iOS开发技术的学习路线图 程序员的主要工作是 ...

  2. ios和android一并学习的体会

    如果说为什么要同时学习这两种不同的移动平台,其实有一定的“闲”的因素在里面. 相对于ios,android我是早半年接触的.最开始学习的时候也就是j2ee学习的延续,通过看视频连带看书学了大概一个月的 ...

  3. IOS开发-OC学习-常用功能代码片段整理

    IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是 ...

  4. IOS开发-UI学习-sqlite数据库的操作

    IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这 ...

  5. UIWindow的windowLevel详解

    UIWindow的windowLevel详解

  6. iOS copy 和 mutableCopy 学习

    (参考 iOS 52个技巧学习心得笔记 第二章 对象 , 消息, 运行期)的对象部分 关于Copy  有个经典问题”大部分的时候NSString的属性都是copy,那copy与strong的情况下到底 ...

  7. IOS开发之XCode学习007:UIWindow对象

    此文学习来源为:http://study.163.com/course/introduction/1002858003.htm #import "AppDelegate.h" @i ...

  8. ios UIWindow 错误使用导致无法接收motionEnded(摇一摇)函数

    今天遇到一个问题,第一次运行程序时,- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event函数无法调用,第二次就好了 ...

  9. iOS - UIWindow

    前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIWindow : UIView @available(iOS 2.0, *) public class UIWi ...

随机推荐

  1. [转]为什么我说ORM是一种反模式

    原文地址:http://www.nowamagic.net/librarys/veda/detail/2217 上周我在在上讨论了ORM,在那以后有人希望我澄清我的意思.事实上,我曾经写文章讨论过OR ...

  2. imx6用文件io操作gpio

    具体请参考: http://blog.csdn.net/u014213012/article/details/53140781 这里要注意的是: 要让linux支持文件io方式操作gpio,首先驱动必 ...

  3. atom安装插件

    1. 由于墙的原因,在界面中安装不了 先安装 npm 可以下载node.js桌面版命令行 2.打开命令行中进入atom的安装目录,进入到packages 中 3. 进入github 官网 输入你要下载 ...

  4. ThinkPHP自动填充实现无限级分类的方法

    这篇文章主要介绍了ThinkPHP自动填充实现无限级分类的方法,是ThinkPHP项目开发中非常实用的一个技巧,需要的朋友可以参考下   本文实例展示了ThinkPHP自动填充实现无限级分类的方法,是 ...

  5. 第二百零三节,jQuery EasyUI,Window(窗口)组件

    jQuery EasyUI,Window(窗口)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Window(窗口)组件的使用方法,这个组件 ...

  6. 003android初级篇之【转】Android开发中颜色的定义方法

    正好用到颜色的定义,但脑子里没有记住具体,转载一篇加强印象 1.使用Color类的常量,如: int color = Color.BLUE; // 创建一个蓝色 是使用Android提供的颜色 int ...

  7. ASP.NET管道技术

    Asp.net mvc是基于dnf(.net framework )实现了代码分离的开源框架.ASP.NET MVC框架拥有极强的定制以及扩展的特性.本文梳理了ASP.NET MVC的管道(pipel ...

  8. 单线程爬虫VS多线程爬虫的效率对比

    单线程爬虫: import re import requests import time url_EB = 'http://www.amazon.com/gp/search/other/ref=sr_ ...

  9. 第一章----python简介

    1.python简介 定义:python是一种计算机程序设计语言,是一种相当高级的语言,是用来编写应用程序的高级编程语言: 特点:优势:简单易用:提供了非常完善的基础代码库:优雅,明确,简单.劣势 : ...

  10. 服务器之ECC报错检查

    需要使用ipmitool工具 [root@Resource ~]# yum install ipmitool 首先查看是否有ecc报错 如下图: [root@Resource ~]# ipmitool ...