java ui 窗口跳转_教你使用UIWindow实现窗口的切换

本文介绍了如何在iOS应用中使用UIWindow进行窗口切换,特别是在实现手势解锁页面的需求时遇到的问题及解决方案。作者通过创建两个窗口,一个主窗口和一个用于手势解锁的窗口,详细说明了窗口的创建、设置根控制器以及解决窗口销毁问题的方法。同时,文章还涵盖了窗口隐藏的实现代码。
摘要由CSDN通过智能技术生成

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

著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值