在IOS 7/8上展示之前,将模糊效果应用于视图?

时间:2014-09-15 16:47:22

标签: ios objective-c

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

我遇到的主要问题是,在显示之前我不知道如何访问视图。 如果我尝试获取- (void)viewDidLoad内的视图,则不应用模糊效果(因为视图尚未存在),如果我尝试访问- (void)viewDidAppear:(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];

提前致谢。

1 个答案:

答案 0 :(得分:1)

不确定为什么,但得到&模糊主线程中的视图工作正常,即使在- (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];
        }
    });
}