在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我知道还有其他解决方案,比如隐藏视图或使用某种东西覆盖,但我喜欢模糊效果,并希望使用它。