首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在IOS 7/8上演示之前,将模糊效果应用到视图上?

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

Stack Overflow用户
提问于 2014-09-15 16:47:21
回答 1查看 493关注 0票数 1

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

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

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

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

代码语言:javascript
运行
复制
UIVisualEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight];
UIVisualEffectView * visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
visualEffectView.frame = self.view.window.bounds;
[UIApplication.sharedApplication.keyWindow.subviews.lastObject addSubview:visualEffectView];

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-15 17:21:10

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

代码语言:javascript
运行
复制
    dispatch_async(dispatch_get_main_queue(), ^{
        //blur here
    });

现在,它运行良好,即使是从AppDelegate调用!

代码语言:javascript
运行
复制
@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];
        }
    });
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25852914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档