如何在applicationDidBecomeActive之前更新屏幕?

问题描述:

当用户通过切换到前景来激活应用程序时,我需要隐藏屏幕上的内容。如何在applicationDidBecomeActive之前更新屏幕?

我已经尝试在applicationDidBecomeActive或applicationWillEnterForeground中插入我的代码,虽然它运行良好,但我想要隐藏的文本的旧屏幕会立即显示。

如何在屏幕重绘之前隐藏该字段?

感谢

iphaaw

我认为问题是,iOS设备将捕获从它转到后台的那一刻你的应用程序的截图,所以动画将在瞬间工作。

我认为这样做的唯一方法是在应用程序转到背景时隐藏/遮盖您的视图。

applicationWillResignActive:中写一些代码来隐藏您需要隐藏的任何内容。

我面临类似的情况,但我不想隐藏,而是想显示一个块代码屏幕来授予访问权限。无论如何,我认为该解决方案也适用于您的需求。

我经常在我的iOS应用程序中实现一个自定义的基本视图控制器。所以,而不是处理applicationDidBecomeActive:applicationWillResignActive:我设置此视图控制器以侦听等效通知:

@interface BaseViewController : UIViewController 

- (void)prepareForGrantingAccessWithNotification:(NSNotification *)notification; 

- (void)grantAccessWithNotification:(NSNotification *)notification; 

@end 


@implementation BaseViewController 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    [self addNotificationHandler:@selector(grantAccessWithNotification:) 
       forNotification:UIApplicationDidBecomeActiveNotification]; 

    [self addNotificationHandler:@selector(prepareForGrantingAccessWithNotification:) 
       forNotification:UIApplicationWillResignActiveNotification]; 
} 

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

- (void)prepareForGrantingAccessWithNotification:(NSNotification *)notification { 
    // Hide your views here 
    myCustomView.alpha = 0; 

    // Or in my case, hide everything on the screen 
    self.view.alpha = 0; 
    self.navigationController.navigationBar.alpha = 0; 
} 

- (void)grantAccessWithNotification:(NSNotification *)notification { 
    // This is only necessary in my case 
    [self presentBlockCodeScreen]; 
    self.view.alpha = 1; 
    self.navigationController.navigationBar.alpha = 1; 
    ... 
} 

@end