ios - 在 IOS 7/8 上呈现之前对 View 应用模糊效果?

标签 ios objective-c

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

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

有没有办法在屏幕上显示之前获取 View 并应用模糊效果?

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

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

提前致谢。

最佳答案

不知道为什么,但在主线程中获取和模糊 View 效果很好,即使在 - (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];
        }
    });
}

关于ios - 在 IOS 7/8 上呈现之前对 View 应用模糊效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25852914/

相关文章:

ios - Swift 中的条件映射函数

ios - 为什么 UIView 比 Screen 宽

ios - 通过使用 JSON 的 POST 从 NSURLSession 取回数据

objective-c - Ada 支持 put_line 中的变量吗?

objective-c - 是否有必要在 Objective-C 类中添加 dealloc 方法?

iphone - 如何通过 Safari URL 启动我的 iPhone 应用程序

ios - Swift:核心动画没有动画

ios - UITableView 中的后退按钮

iphone - iOS:有条件地加载 View Controller

ios - 如何播放下载的mp3文件?