我想以编程方式从我的应用程序截取屏幕截图并且代码工作正常,但我有一个带模糊效果的UIVisualEffectView,截图给了我没有模糊的图像! 如何让屏幕截图也变得模糊?
UIGraphicsBeginImageContextWithOptions(fullView.bounds.size, true, 1)
self.fullView.layer.renderInContext(UIGraphicsGetCurrentContext())
var viewImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil)
答案 0 :(得分:3)
要在以编程方式拍摄屏幕图像时保留UIVisualEffectView Blur,您必须拍摄整个屏幕的图像。
以下是Apple提供的更为技术性的定义:
许多效果需要来自托管的窗口的支持 UIVisualEffectView。试图仅拍摄快照 UIVisualEffectView将生成一个不包含的快照 影响。拍摄包含a的视图层次结构的快照 UIVisualEffectView,你必须拍摄整个UIWindow或 包含它的UIScreen。 - Apple Documentation
答案 1 :(得分:1)
截取屏幕截图后,可以通过编程方式添加模糊效果。以下是使用GPUImage库的示例,可以使用CocoaPods进行安装。使用原生Apple库也可以实现类似的效果。
GPUImagePicture *picture = [[GPUImagePicture alloc] initWithImage:snapShot];
GPUImageiOSBlurFilter *blurFilter = [[GPUImageiOSBlurFilter alloc] init];
[blurFilter setBlurRadiusInPixels:4];
[picture addTarget:blurFilter];
[blurFilter useNextFrameForImageCapture];
[picture processImage];
UIImage *processed = [blurFilter imageFromCurrentFramebuffer];
答案 2 :(得分:0)
我有同样的问题。我有一个视觉效果(模糊)应用于背景图像和顶部的其他非模糊视图的视图控制器,我想拍摄该控制器的屏幕截图。
正如@ user3721428所强调试图捕获视图不起作用。我很惊讶尝试在上下文中渲染窗口层不起作用。
从UIScreen获取snapshotView的工作原理是什么:
let view = UIScreen.main.snapshotView(afterScreenUpdates: true)