我正在开发涉及隐私的应用程序,我想在应用程序启动时模糊主屏幕(然后我要求本地身份验证等等。)
我遇到的主要问题是,在显示之前我不知道如何访问视图。
如果我尝试获取- (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];
提前致谢。
答案 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];
}
});
}