教你使用UIWindow实现窗口的切换
这两天写了一个手势解锁,该死的需求要求这个手势解锁页面各种出现,毕竟人家这个客户端酒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实现窗口的切换的更多相关文章
- QT 主窗口和子窗口相互切换示例
QT 主窗口和子窗口相互切换示例 文件列表: SubWidget.h #ifndef SUBWIDGET_H #define SUBWIDGET_H #include <QtWidgets/QW ...
- Android实例-多窗口的切换
Android实例-多窗口的切换 1.图片一是程序运行后的界面. 2.图片二是点击"非模态显示"的界面. 3.图片三是点击"模诚显示"的界面(提示平台不支持). ...
- Python+Selenium练习篇之19-多窗口之间切换
本文来介绍如何处理driver在多窗口之间切换,想一下这样的场景,在页面A点击一个连接,会触发在新Tab或者新窗口打开页面B,由于之前的driver实例对象在页面A,但是你接下来的脚本是操作页面B的元 ...
- selenium 操作多个窗口间切换
#coding=gbk ''' selenium多个窗口间切换 ''' from selenium import webdriver as wd from selenium.webdriver imp ...
- 关于Qt5(1)-- 两个窗口互相切换的例子
<QT Creator快速入门>这本书有一章介绍model和modeless的概念时,用到了两个窗口互相切换的例子.但是原文对该例子的说明非常模糊不清,现整理如下. 1,要求:登陆界面.主 ...
- 一些有用的 Emacs 配置(窗口快速切换、一键透明效果、任意位置删除整行等)
本篇文章记录的是一些有用的 Emacs 配置,有些是自己原创,有些是借鉴别人(能记起来出处的我放了链接). 规定:C 代表 Ctrl,M 代表 Alt. 1.设置一次跳跃 n 行的快捷键 按 C-M- ...
- WebDriver(Selenium2) 根据新窗口title切换窗口
http://uniquepig.iteye.com/blog/1559321 在webdriver官方的api中,切换窗口的方法提供的参数是nameOrHandle. 引用 http://uniqu ...
- selenium+python浏览器窗口的切换
1.首先需要知道当前浏览器中有多少个活动的窗口 >>> br.window_handles[u'{075a54ee-3d10-4c76-b56d-b645259bbd54}', u' ...
- 01.QT初学--两个窗口相互切换
//qqwidget.cpp #include "qqwidget.h" #include "ui_qqwidget.h" qqwidget::qqwidget ...
随机推荐
- SPA examples
http://webdesignledger.com/inspiration/40-excellent-examples-of-single-page-websites https://onepage ...
- java使用ms-dos编译,运行程序
1.安装好JDK,并配置好环境变量. 2.编辑好源程序,如Test.java public class Test{ public static void main(String[] args){ Sy ...
- 关于js with语句的一些理解
关于js with语句的一些理解 今天看到js的with语句部分,书中写到,with语句接收的对象会添加到作用域链的前端并在代码执行完之后移除.看到这里,我有两点疑问,添加到作用域链前端是不是指对 ...
- Ztree的初步使用--checkbox--指定目录下搜索子节点
这里记录一下zTree的check的使用 首先 <%@ Page Language="C#" AutoEventWireup="true" CodeBeh ...
- MySQL基本概念
MySQL 数据库 MySQL可分为三个层次:文件层次,服务层次,界面 常用的数据类型:int 整数float double decimal ——小数(要在十进位栏里设置小数点后最大显示位数)varc ...
- JavaScript的DOM操作(1)
1.DOM的基本概念 DOM是文档对象模型,这种模型为树模型:文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西. 2.Window对象操作 一.属性和方法: 属性(值或者子对象): op ...
- 【CentOs】sudo使用
在使用Linux系统过程中,通常情况下,我们都会使用普通用户进行日常操作,而root用户只有在权限分配及系统设置时才会使用,而root用户的密码也不可能公开.普通用户执行到系统程序时,需要临时提升权限 ...
- thinkphp中SQLSTATE[42S02]: Base table or view not found: 1146 Table错误解决方法
随手记录下今天在thinkphp3.2.3中遇到的错误SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.file_info ...
- orbis 链接 .a的问题
orbis-clang.exe :error: no such file or directory : libppfxd_delta.a 这个东西真是见鬼 明明在那里就是说找不到 在依赖里libppf ...
- Request/Server模式
Request-------HTTP/SOAP----------Server Request模块只是Client的一小部分,Client还有HTML, Data(Text/JSON/HTML/XML ...