免费开源的iOS开发学习平台

UIImage与绘图:4-截屏

在游戏应用中,通常会提供截屏的功能,用来记录辉煌的游戏记录。UIKit框架中,也提供了简单高效的截屏方法,以及保存截屏文件的方法,供开发者直接调用。

截屏的实现思路

通常情况下,在应用中添加截屏功能需要有如下两个步骤:

第一步,获取当前屏幕截屏图片。在UIView类中,提供了drawViewHierarchyInRect: afterScreenUpdates方法,利用该方法可以实现对任何View视图的截取图像操作。在使用之前,需要提前准备绘图上下文。

- (BOOL)drawViewHierarchyInRect:(CGRect)rect afterScreenUpdates:(BOOL)afterUpdates ;

第二步,保存图片到本地相册。在UIImagePickerController类中,封装了一个专门用于保存图片到相册的函数UIImageWriteToSavedPhotosAlbum。通过该函数可以把UIImage图片对象存放到手机相册中。

UIKIT_EXTERN void UIImageWriteToSavedPhotosAlbum(UIImage *image, __nullable id completionTarget, __nullable SEL completionSelector, void * __nullable contextInfo) ;

示例代码

下方的代码实现了,当应用启动并显示第一个控制器视图时,会自动截屏并保存到相册功能。

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    
    //开启一个图形上下文
    UIGraphicsBeginImageContext(self.view.bounds.size);
    
    //截屏
    if ([self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:NO]){
        NSLog(@"Successfully draw the screenshot."); }
    else{
            NSLog(@"Failed to draw the screenshot.");
        }
    //获取当前上下文
    UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
    //关闭上下文
    UIGraphicsEndImageContext();
    
    //保存到相册
    UIImageWriteToSavedPhotosAlbum(screenshot, self, nil, nil);
}

https://github.com/99ios/14.2.4