iOS双击Home键,毛玻璃效果

项目中有时为了安全起见,在双击Home键,退到不活跃状态时,需要添加模糊效果,比如下图:

高斯模糊

要实现这种效果,非常简单,只需在APPdelegate里面添加几句代码即可

//AppDelegate.h中添加以下属性

@property (nonatomic,strong) UIVisualEffectView *visualEffectView;//毛玻璃效果
AppDelegate.m中

- (void)applicationWillResignActive:(UIApplication *)application {
    UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
    self.visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
    self.visualEffectView.alpha = 0;
    self.visualEffectView.frame = self.window.frame;
    [self.window addSubview:self.visualEffectView];
    [UIView animateWithDuration:0.2 animations:^{
        self.visualEffectView.alpha = 1;
    }];

}


- (void)applicationDidBecomeActive:(UIApplication *)application {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    [UIView animateWithDuration:0.2 animations:^{
        self.visualEffectView.alpha = 0;
    } completion:^(BOOL finished) {
        [self.visualEffectView removeFromSuperview];
    }];

}

以上就是实现毛玻璃的全部代码,是不是很简单呢~~~

后续加上:经测试这种写法有点小问题,就是如果项目中有拨打电话的操作(系统弹出拨打电话的提示框),这时弹出框下面的整个屏幕也是毛玻璃效果,这并不是我们想看到的,那怎么改呢,其实就是方法写的位置不对,按照下面的方法写

注意:将
- (void)applicationWillResignActive:(UIApplication *)application;
里面的代码放进
- (void)applicationDidEnterBackground:(UIApplication *)application;
里面,两个方法里面的代码虽然相似,但是属性值有所改变,要注意!!!

- (void)applicationDidEnterBackground:(UIApplication *)application {
    
    UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
    self.visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
    self.visualEffectView.alpha = 1;
    self.visualEffectView.frame = self.window.frame;
    [self.window addSubview:self.visualEffectView];
    [UIView animateWithDuration:0.2 animations:^{
        self.visualEffectView.alpha = 1;
    }];

}


- (void)applicationDidBecomeActive:(UIApplication *)application {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    [UIView animateWithDuration:0.2 animations:^{
        self.visualEffectView.alpha = 0;
    } completion:^(BOOL finished) {
        [self.visualEffectView removeFromSuperview];
    }];

}

改成下面的方法后,上面出现的问题就解决了,只是可能首次进入后台的时候不能正常显示效果,支付宝也存在这种情况,但是基本上无伤大雅~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,008评论 3 119
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,124评论 25 708
  • “失恋的第一天你和你的前任都做了什么?”知乎timeline一度被这个问题占据,几次刷到后终于忍不住点进去回答。 ...
    言晏思反阅读 1,231评论 5 7
  • 小之子坚持100天更文DAY29打卡 不知道为什么?今天一说起人物,我就想讲我的母上大人了,而一说起母上大人,我就...
    7IMpossible阅读 327评论 0 0
  • 自己画了一些小动物~~ 动物总动员啦~~ 哼哼哈兮~~~
    LiwangNig阅读 190评论 3 5