iOS系统,App运行在前台时,截屏的方式有很多,但是当被切到后台,或者锁屏时,截屏就会出现问题。
解决方案如下:
后台运行
iOS系统后台运行的方式参考:iOS-Background Execution。
截屏方式
一般情况下,使用以下方式是最好的:
1 | - (UIImage *)snapshot{ |
但是,这种方式在切到后台,或者锁屏时,得到的图片的内容是空白,所以,这种情况下,我们直接利用CLLayer来渲染,生成图片。但是,利用CLLayer渲染生成的图片是跟手机屏幕大小一致的,为了得到我们想要的大小,需要进行拉伸,调用CGContextScaleCTM来完成:
1 | CGContextScaleCTM(UIGraphicsGetCurrentContext(), videoSize.width / SCREEN_WIDTH, videoSize.height / SCREEN_HEIGHT); |
OpenGL
用上述的方式截屏时,由于OpenGL的特殊性,无法截取到其渲染内容,所以,我们需要进一步进行修改:
创建一个CAEAGLLayer的子类:
CaptureCAEAGLLayer.h文件:
1 | #import <QuartzCore/QuartzCore.h> |
CaptureCAEAGLLayer.m文件:
1 | #import "CaptureCAEAGLLayer.h" |
对使用CAEAGLLayer的View进行修改:
1 | CaptureCAEAGLLayer *eaglLayer = (CaptureCAEAGLLayer *)self.layer; |