在IOS 7/8上显示之前对视图应用模糊效果?

在IOS 7/8上显示之前对视图应用模糊效果?,ios,objective-c,Ios,Objective C,我正在开发一个涉及隐私的应用程序,我想在应用程序启动时模糊主屏幕(然后我请求本地身份验证等) 我遇到的主要问题是,在视图显示之前,我不知道如何访问它。 如果我尝试在-(void)viewdiload内获取视图,则不会应用模糊效果(因为该视图尚不存在),如果我尝试访问-(void)viewdilease:(BOOL)animated内的视图,则在应用模糊效果之前,非模糊视图会出现一秒钟 有没有一种方法可以在屏幕上显示之前获取视图并应用模糊效果 我用于应用模糊效果的代码是: UIVisualEffe

我正在开发一个涉及隐私的应用程序,我想在应用程序启动时模糊主屏幕(然后我请求本地身份验证等)

我遇到的主要问题是,在视图显示之前,我不知道如何访问它。 如果我尝试在
-(void)viewdiload
内获取视图,则不会应用模糊效果(因为该视图尚不存在),如果我尝试访问
-(void)viewdilease:(BOOL)animated
内的视图,则在应用模糊效果之前,非模糊视图会出现一秒钟

有没有一种方法可以在屏幕上显示之前获取视图并应用模糊效果

我用于应用模糊效果的代码是:

UIVisualEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight];
UIVisualEffectView * visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
visualEffectView.frame = self.view.window.bounds;
[UIApplication.sharedApplication.keyWindow.subviews.lastObject addSubview:visualEffectView];

提前感谢。

不知道为什么,但是在主线程中获取和模糊视图效果很好,即使在
-(void)viewDidLoad
中也是如此。模糊是即时的,而非模糊版本根本不显示

    dispatch_async(dispatch_get_main_queue(), ^{
        //blur here
    });
现在,即使从AppDelegate调用,它也可以正常工作

@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // ...
    [self addBlurLayer];
    // ...
    return YES;
}

-(void)addBlurLayer
{
    dispatch_async(dispatch_get_main_queue(), ^{
        if(visualEffectView==nil)
        {
            UIVisualEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight];
            visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
            visualEffectView.frame = self.window.bounds;
            [UIApplication.sharedApplication.keyWindow.subviews.lastObject addSubview:visualEffectView];
        }
    });
}

您是否尝试过
-(void)视图将显示:(BOOL)动画
?此外,您应该在最初设计视图时使用模糊层,并在不再需要时将其隐藏。可能会使主视图中的内容在viewWillDisplay中隐藏(将其添加到子视图并隐藏)吗?请尝试viewWillDisplay,也许可以。@jeffamaphone-(void)viewWillDisplay:(BOOL)动画不起作用,同样的问题。视图还没有渲染,所以没有应用模糊。@Yanchi我知道还有其他解决方案,比如隐藏视图或使用某种东西覆盖,但我喜欢模糊效果,并希望使用它。