双击Home键实现模糊效果

似乎目前所见这样的效果都是在金融类App中,毕竟钱真的很重要😳。在此尝试一下,反正闲着也是闲着(?)。

可知双击Home键或者应用退到后台的时候,都会经历以下方法:

- (void)applicationWillResignActive:(UIApplication *)application { }

所以在这里添加毛玻璃效果,并且在

- (void)applicationDidBecomeActive:(UIApplication *)application { }

方法中删除此效果。

步骤在此

  • 获取当前VC
- (UIViewController *)currentVC {
    
    UIViewController *currentVC = nil;
    
    if (self.window.windowLevel != UIWindowLevelNormal) {
        
        NSArray *windows = [[UIApplication sharedApplication] windows];
        for (UIWindow *window in windows) {
            
            if (window.windowLevel == UIWindowLevelNormal) {
                
                self.window = window;
                break;
            }
        }
    }
    
    UIView *frontView = [[self.window subviews] lastObject];
    id nextResponder = [frontView nextResponder];
    
    if ([nextResponder isKindOfClass:[UIViewController class]]) {
        
        currentVC = nextResponder;
    } else {
        
        currentVC = self.window.rootViewController;
    }
    
    return currentVC;
}
  • 截取当前视图
- (UIImage *)snapShot:(UIView *)view {
    
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0);
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return image;
}

  • 添加毛玻璃效果
- (void)applicationWillResignActive:(UIApplication *)application {
    
    NSLog(@"applicationWillResignActive");
    
    // 毛玻璃效果
    UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    UIViewController *vc = [self currentVC];
    imageView.image = [self snapShot:vc.view];
    
    UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
    UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:blur];
    effectView.frame = [UIScreen mainScreen].bounds;
    
    [imageView addSubview:effectView];
    view.tag = 1000;
    [view addSubview:imageView];
    [self.window addSubview:view];
}
  • 在应用DidBecomeActive时去除效果
- (void)applicationDidBecomeActive:(UIApplication *)application {
    
    for (UIWindow *window in [[UIApplication sharedApplication] windows]) {
        
        if (window.windowLevel == UIWindowLevelNormal) {
            
            UIView *view = [window viewWithTag:1000];
            [view removeFromSuperview];
        }
    }
}

以上。

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

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,246评论 4 61
  • 缺口 文/雪婷 夜无眠,独自站在阳台上。 抬头数星星,皎洁的月光洒向大地。 光亮,惊动了楼下的黑猫。 剑般的速度射...
    凌韵雪婷阅读 139评论 0 0
  • 在弥漫着沐浴芳香和夹杂着些许玫瑰香料的房间里面,你绝对看不到一个美丽少妇穿着性感睡衣在你面前搔首弄姿,极尽诱惑,你...
    宅宅公子阅读 264评论 0 0