这两天写了一个手势解锁,该死的需求要求这个手势解锁页面各种出现,毕竟人家这个客户端酒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. 009--VS2013 C++ 显示位图部分透明化

    其实这个更简单,只是把上一编文章的半透明化的代码去掉就可以啦 还是原来那张图片: //全局变量HBITMAP bg, girl;HDC mdc;//起始坐标const int xstart = 50; ...

  2. 46.谈谈SDRAM的作用

    SDRAM这个至今还在用的存储器,虽然被后来的DDR取代,掌握好它还是很重要的.之前在调试时,确实费了好大劲,它的复杂性毋庸置疑,一般人要想弄懂他,得花1个月左右吧,至少我这么认为.话说回来,SDRA ...

  3. VIM实用基本操作技巧

    文本编辑器有很多,图形模式下有gedit.kwrite等编辑器,文本模式下的编辑器有vi.vim(vi的增强版本)和nano.vi和vim是Linux系统中最常用的编辑器.有人曾这样的说过在世界上有三 ...

  4. 新安装Ubuntu加载时提示“为/检查磁盘时发生严重错误”的解决方法

    本文部分内容转载自: http://jingyan.baidu.com/article/0aa22375bbffbe88cc0d6419.html http://www.aichengxu.com/v ...

  5. 莫名戳中"肋骨"的文章

    1 起初,我们总是会害怕,害怕不能得到自己渴望的物质生活,害怕遇不到那个好好爱自己的人,害怕失去青春也换不回事业上的进步,害怕会做下一个让自己悔恨的决定,可这一路,我们就是这样踩着自己的害怕和悔恨走来 ...

  6. 【每日scrum】NO.5

    尝试采用自己的地图,绘点并计算路径,但是地图打开出现问题.

  7. 【每日scrum】NO.4

    1.掌握了如何求两点间的最短距离这个算法.

  8. vi中正则表达式的使用

    在当前行中删除从aa到zz的所有字符 :s/aa.*zz//在整个文件用and代替所有的&字符:1,$s/&/and/g在每一行的首行插入字符串new:1,$s/^/new/g在第二行 ...

  9. python 数据结构-列表

    列表常用方法汇总: #定义列表li li=[12.23,456,88,9] a=[1,2,3] #添加元素到列表结尾 li.append(360) #追加列表元素extend(L) li.extend ...

  10. hibernate---核心开发接口1(重点)

    面试考这个比较少 a) Session session = sessionFactory.openSession();    永远都是打开新的 记得要 close b)  Session sessio ...