我要实现一个特定的ViewController
- 每当我的应用程序进入前台时弹出窗口,
- 需要访问密码。
由于应用程序已经成熟并且有点复杂,我宁愿将此密码屏幕作为单独的ViewController处理,该ViewController出现在其他VC之上,通过appDidBecomeActive等方法从AppDelegate调用:
if (self.pwdVc==nil)
self.pwdVc = [mainStoryboard instantiateViewControllerWithIdentifier:@"passwordScreen"];
[self.window.rootViewController presentViewController:self.pwdVc animated:NO completion:nil];
这种方法的问题似乎是:当应用程序进入前台时,密码ViewController尚未在屏幕上绘制,并且在短时间内显示真实的应用程序屏幕。
即使我提前在applicationDidEnterBackground
中触发显示密码ViewController,当应用程序回到前台时,实际的屏幕重绘仍会发生,从而显示应用程序屏幕。
任何人都可以建议最合适的方法让这个密码屏幕隐藏隐藏的ViewControllers吗?
alpha设置从0.0切换到1.0的方法似乎还需要一些时间才能显示,到目前为止还没有工作。
谢谢!
答案 0 :(得分:1)
使用此方法在最重要的基础上呈现viewController。
+ (void)presentViewController:(UIViewController *)viewController animated:(BOOL)animated complete:(void (^)(void))callback
{
UIViewController *activeModalVC = [[[[UIApplication sharedApplication] delegate] window].rootViewController presentedViewController];
if (activeModalVC) {
[activeModalVC presentViewController:viewController animated:animated completion:callback];
} else {
[[[[UIApplication sharedApplication] delegate] window].rootViewController presentViewController:viewController animated:animated completion:callback];
}
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Making passwordView to load
self.pwdVc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil]
instantiateViewControllerWithIdentifier:@"passwordScreen"];
[self.pwdVc view];
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[AFAppDelegate presentViewController:self.pwdVc animated:NO complete:nil];
}
答案 1 :(得分:0)
我从2013年开始就此主题找到another thread,说明可以在拍摄屏幕快照之前执行从applicationDidEnterBackground
中删除当前视图中的相关数据的说明。
实际上它对我不起作用:在执行applicationDidEnterBackground
甚至applicationWillResignActive
之前,屏幕内容会返回用于返回foregroung的快照。
答案 2 :(得分:0)
解决方案来自this topic,它基于在任何其他视图之上放置一个不透明的“屏幕锁定”视图,并通过正确的hidden
中的AppDelegate
属性对其进行控制方法!
所以:
view.hidden=NO
中设置其didFinishLaunchingWithOptions
; view.hidden=NO
中设置applicationWillResignActive
,因为在将应用程序发送到后台以及调用多任务处理屏幕时都会发生此调用; view.hidden=YES
的方法。(可选)使用layer.zPosition
调整可见视图的顺序。
Etvoilà!谢谢大家!