这两天写了一个手势解锁,该死的需求要求这个手势解锁页面各种出现,毕竟人家这个客户端酒20多个领导用用的,怕泄密就加了各种保密措施。
先来看下需求:
1.用户注册登录后跳转设置手势页面(必须设置)。
2.app进入后台跳转前台是进入手势解锁界面。
3.app内部分按钮跳转手势界面。

开始我也想过使用UIWindow,后面因为没有使用过就用push和模态窗口两种方式去实现了一下,最后勉强实现了,但是在过程中真的是遇到各种问题,就包括我第二次进入客户端进入手势解锁页面时如果使用模态窗口的话,当手势解锁成功时就导致了整个界面就是黑的,因为后面没有界面了,还有出线了连续两次push到同一控制器等原因,虽然实现了最后,不过我还是用window窗口切换实现了一次,下面我就分享下大致实现的过程,其中也遇到了不少的坑。

首先就是实现了两个window,一个主window,另外一个window我用来放了手势解锁页面。

具体从ios几开始,我也忘记了,现在的window必须指定根控制器,这个根控制器会帮你自动的管理这个window。

在初始化window和控制器之后我编译运行了一下,发现还是实现不了,跑了很多遍终于发现了问题,就是窗口必须被强指针引用,不然一创建就直接被销毁了。下面附上Demo:

self.window =[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
XYLoginViewController *LoginView = [[XYLoginViewController alloc] init];
CustomNavigationController *navControl =[[CustomNavigationController alloc] initWithRootViewController:LoginView];
self.window.rootViewController = navControl; LockController *LockView = [[LockController alloc] init];
self.LockWindow =[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.LockWindow.backgroundColor = [UIColor yellowColor];
//设置高的优先级,保证窗口在最上方
self.LockWindow.windowLevel = UIWindowLevelAlert + 2;
self.LockWindow.rootViewController = LockView; if ([self isFirstTimeRun]) {
//修改为不再是第一次运行
[self setFirstTimeRun:NO];
//显示主窗口
self.window.hidden = NO;
[self.window makeKeyAndVisible];
} else {
self.LockWindow.hidden = NO;
[self.LockWindow makeKeyAndVisible];
}

窗口隐藏:

AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate];
//隐藏解锁窗口
[myDelegate.LockWindow resignKeyWindow];
myDelegate.LockWindow.hidden=YES;
文/进击的小杰(简书作者)
原文链接:http://www.jianshu.com/p/5bc2921cf772
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

教你使用UIWindow实现窗口的切换的更多相关文章

  1. QT 主窗口和子窗口相互切换示例

    QT 主窗口和子窗口相互切换示例 文件列表: SubWidget.h #ifndef SUBWIDGET_H #define SUBWIDGET_H #include <QtWidgets/QW ...

  2. Android实例-多窗口的切换

    Android实例-多窗口的切换 1.图片一是程序运行后的界面. 2.图片二是点击"非模态显示"的界面. 3.图片三是点击"模诚显示"的界面(提示平台不支持). ...

  3. Python+Selenium练习篇之19-多窗口之间切换

    本文来介绍如何处理driver在多窗口之间切换,想一下这样的场景,在页面A点击一个连接,会触发在新Tab或者新窗口打开页面B,由于之前的driver实例对象在页面A,但是你接下来的脚本是操作页面B的元 ...

  4. selenium 操作多个窗口间切换

    #coding=gbk ''' selenium多个窗口间切换 ''' from selenium import webdriver as wd from selenium.webdriver imp ...

  5. 关于Qt5(1)-- 两个窗口互相切换的例子

    <QT Creator快速入门>这本书有一章介绍model和modeless的概念时,用到了两个窗口互相切换的例子.但是原文对该例子的说明非常模糊不清,现整理如下. 1,要求:登陆界面.主 ...

  6. 一些有用的 Emacs 配置(窗口快速切换、一键透明效果、任意位置删除整行等)

    本篇文章记录的是一些有用的 Emacs 配置,有些是自己原创,有些是借鉴别人(能记起来出处的我放了链接). 规定:C 代表 Ctrl,M 代表 Alt. 1.设置一次跳跃 n 行的快捷键 按 C-M- ...

  7. WebDriver(Selenium2) 根据新窗口title切换窗口

    http://uniquepig.iteye.com/blog/1559321 在webdriver官方的api中,切换窗口的方法提供的参数是nameOrHandle. 引用 http://uniqu ...

  8. selenium+python浏览器窗口的切换

    1.首先需要知道当前浏览器中有多少个活动的窗口 >>> br.window_handles[u'{075a54ee-3d10-4c76-b56d-b645259bbd54}', u' ...

  9. 01.QT初学--两个窗口相互切换

    //qqwidget.cpp #include "qqwidget.h" #include "ui_qqwidget.h" qqwidget::qqwidget ...

随机推荐

  1. Windows完成端口网络模型

    GetQueuedCompletionStatus  比如此时端口上完成的是什么操作,数据是什么等,还有,系统如何做到自动填充上述的结构的,也就是说,系统怎么知道在Overlap->OpCode ...

  2. github实践操作

    一.本地仓库的创建和提交 1.下载并安装Git http://msysgit.github.io/,安装完成后在本地电脑创建一个git仓库并初始化本地仓库 2.在git目录下创建一个Readme.tx ...

  3. eclipse for jee版配置tomcat

    在网上搜到的大多都是插件配置,其实默认的就可以配置tomcat的. 第一步:New -> Other -> Server ,然后选择Apache下的tomcat的版本. 注意:如果Next ...

  4. 关于EF查询的性能

    现象:前台grid发送ajax请求,通过谷歌devtool发现“waiting”时间高达23s(1500条数据);可见服务器端代码处理花费时间很长: 解决:分析代码,有两处代码注释掉后速度提升明显 / ...

  5. Netsharp快速入门(之9) 基础档案(工作区3 添加商品菜单,以及在产品中打开商品界面)

    作者:秋时 杨昶   时间:2014-02-15  转载须说明出处 3.5.2  添加导航菜单 1.打开平台工具,插件和资源节点,选择创建导航菜单,打开创建向导 2.选择所属插件 3.选择在哪个分类下 ...

  6. 推荐系统之LFM(二)

    对于一个用户来说,他们可能有不同的兴趣.就以作者举的豆瓣书单的例子来说,用户A会关注数学,历史,计算机方面的书,用户B喜欢机器学习,编程语言,离散数学方面的书, 用户C喜欢大师Knuth, Jiawe ...

  7. Maven安装和配置,eclipse创建Maven项目

    提示:使用Maven需要先安装jdk. 下载安装Maven 一.下载最新版的Maven,下载地址:http://maven.apache.org/download.cgi 二.将Maven下载到E:\ ...

  8. Kali Linux 命令集

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...

  9. sql server 2008 执行计划

    SSMS允许我们查看一个图形化的执行计划(快捷键Ctrl+L)

  10. sql server 时间

    sql server 获取月份天数:1,SELECT 32-DAY(CAST('2015-03-01' as datetime)+32-DAY(CAST('2015-03-01' as datetim ...