这两天写了一个手势解锁,该死的需求要求这个手势解锁页面各种出现,毕竟人家这个客户端酒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. lua编程基础

    1.目前最新的lua版本是lua5.2.3 2.官网下载地址:http://www.lua.org/ftp/ 3.lua的初衷就是一个用于c/c++的小巧的脚本语言,本身是什么功能都没有的,需要手动用 ...

  2. 二叉查找树(BST)

    二叉查找树(BST):使用中序遍历可以得到一个有序的序列

  3. U盘安装 Windows XP 原版 ISO 的几点心得

    虽然我一直致力于推动最新操作系统的部署,劝说周围朋友尽快淘汰 Windows XP,但还是难免有一些老电脑.老朋友的电脑,坚持要使用 XP 系统. 这里有几点使用U盘安装 Windows XP 原版 ...

  4. 使用JavaScript+Html创建win8应用(二)

    向我们的应用中添加JavaScript 的 Windows 库控件,首先我们接着上一个demo把一个评分控件添加进来 与 HTML 控件不同的是,适用于 JavaScript 的 Windows 库控 ...

  5. Android基础整理之四大组件Activity

    最近准备系统的重新整理复习一下Android的各方面的知识,本着知识分享的原则,我就把梳理过程中一些东西给记录下来,权当一个学习笔记吧. 下面步入正题..... 什么是Activity Activit ...

  6. HSSF,XSSF和SXSSF的区别

    HSSF是POI工程对Excel 97(-2007)文件操作的纯Java实现 XSSF是POI工程对Excel 2007 OOXML (.xlsx)文件操作的纯Java实现 从POI 3.8版本开始, ...

  7. django构建blog--页面部分(eclipse+pydev)

    本文介绍的是在eclipse+pydev 平台下,利用django 搭建blog的第2部分:页面部分(主要涉及3个部分:模板.视图.URL模式) 篇幅1:创建模板 blog目录下新建一个文件夹:tem ...

  8. Beta版软件说明书

    软件使用说明书 一.    软件概述 本软件面向广大简易图片使用者,旨在为用户提供简单方便的不对其他软件产生依赖的截图软件,可以脱机使用. 二.    运行环境 个人电脑,Windows7操作系统,. ...

  9. ACM--South Pacific 2012

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=5 ...

  10. 【BZOJ】【2565】最长双回文串

    Manacher算法 找出一个最长子串S=X+Y,且X和Y都是回文串,求最长的长度是多少…… 同时找两个串明显很难搞啊……但是我们可以先找到所有的回文串!在找回文串的同时我们可以预处理出来l[i]和r ...