教你使用UIWindow实现窗口的切换
2016-07-06 本文已影响2757人
进击的小杰
这两天写了一个手势解锁,该死的需求要求这个手势解锁页面各种出现,毕竟人家这个客户端酒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;