iOS實現(xiàn)從后臺切換到前臺有毛玻璃效果

先上圖

Untitled.gif
Untitled1.gif
---------------------------------------------------------模擬器上效果不是很好-------------------------------------------------------

思路:截取當前屏幕,添加毛玻璃效果,進入前臺時顯示圖片,0.2秒后透明度為0并刪除。

在.h文件中
+ (void)addBlurryScreenImage;       //從后臺進入前臺添加模糊效果
+ (void)removeBlurryScreenImage;    //進入前臺后去除模糊效果

在.m文件中
#pragma mark ----------- 當前屏幕截屏 -----------

+ (UIImage *)screenShot {

    CGSize screenSize = [UIScreen mainScreen].bounds.size;
    
    UIGraphicsBeginImageContextWithOptions(screenSize, NO, 0);

    CGContextRef context = UIGraphicsGetCurrentContext();
    
    for (UIWindow *window in [UIApplication sharedApplication].windows) {

          if ([window respondsToSelector:@selector(screen)] || [window screen] == [UIScreen mainScreen]) {
            
            CGContextSaveGState(context);
            
            CGContextTranslateCTM(context, window.center.x, window.center.y);

            CGContextConcatCTM(context, [window transform]);
            
            CGContextTranslateCTM(context, -[window bounds].size.width * [[window layer] anchorPoint].x, -[window bounds].size.height * [[window layer] anchorPoint].y);
            
            [[window layer] renderInContext:context];

            CGContextRestoreGState(context);
        }
        
    }
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    
    return img;
}

在.m文件中
//從后臺進入前臺添加模糊效果

+ (void)addBlurryScreenImage {
    
    UIImageView *imgView    = [[UIImageView alloc]initWithFrame:[UIScreen mainScreen].bounds];
    
    imgView.tag             = ScreenImgViewTag;
    
    imgView.image           = [[self screenShot] imgWithBlur]; //添加毛玻璃
    
    [[[UIApplication sharedApplication] keyWindow] addSubview:imgView];
    
}

//進入前臺后去除模糊效果

+ (void)removeBlurryScreenImage {
    
    for (id object in [[UIApplication sharedApplication] keyWindow].subviews) {
        
        if ([[object class] isSubclassOfClass:[UIImageView class]]) {
        
            UIImageView *screenImgView = (UIImageView *)object;
            
            if (screenImgView.tag == ScreenImgViewTag) {
                
                [UIView animateWithDuration:0.2 animations:^{
                    screenImgView.alpha = 0;
                } completion:^(BOOL finished) {
                    [screenImgView removeFromSuperview];
                }];
                
            }
        
        }
    }
    
}
在AppDelegate.m中

- (void)applicationWillResignActive:(UIApplication *)application {
        //添加模糊截屏
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
        //去除模糊截屏
}

功能以實現(xiàn)。

github鏈接

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容