ios——如何完成截屏操作并将截屏结果保存到设备本地相册

ios工程——(UIView)获取设备相册权限截取屏幕内容并保存到设备本地相册

设备/引擎:Mac(11.6)/cocos

开发工具:Xcode(13.0)

开发需求:对某个玩法进行截屏操作,并以图片形式保存到设备相册中

很多时候我们需要允许用户对游戏进行截屏并保存到相册,尤其是带有DIY属性的玩法,用户更希望将自己的想法保存起来,所以添加截屏功能可以很好的提高用户体验。

一般要完成截屏保存功能需要分以下几步:
获取设备权限->截屏并将内容以图片形式储存起来->保存图片到设备相册

1.获取设备权限
在工程的Info.plist中添加权限
在这里插入图片描述

Application requires iPhone environment

设置为YES,即表示允许App访问iPhone

2.截屏并将内容以图片形式储存起来
此部分主要是将需要保存的部分转换为图片形式,主要用到了cocos中的CCRenderTexture创建动态纹理,主要分为以下几步:
1).创建一个新的CCRenderTexture:指定所要创建纹理的宽度和高度。
2).调用CCRenderTexture的begin方法:设置OpenGL以便之后的任何图形绘制都在CCRenderTexture上。
3).绘制纹理:使用原始的OpenGL命令来绘制,或通过调用现有的Cocos2D对象的visit方法。
4).调用CCRenderTexture的end方法:渲染纹理,关闭绘制到纹理上。
5).调用CCImage,将CCRenderTexture创建的纹理保存为图片。
代码如下:

    CCSize winSize = CCDirector::sharedDirector()->getWinSize();
    CCRenderTexture* renderTexture = CCRenderTexture::create(winSize.width, winSize.height);
    renderTexture->begin();
    picLayer->visit();
    renderTexture->end();
    renderTexture->cleanup();
    CCImage* image = renderTexture->newCCImage();
    image->autorelease();
    return image;

3.保存图片到设备相册
1)创建一个基于位图的上下文(context),并将其设置为当前上下文(context)

UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);
CGRect rect = viewController.view.frame;

size就是取当前屏幕的尺寸:

RootViewController* viewController = [(AppController*)[[UIApplication sharedApplication] delegate] viewController];
CGSize size = viewController.view.bounds.size;

参数NO:是否为透明图层

第三个参数是缩放比例,iPhone 4是2.0,其他是1.0。这里可以用[UIScreen mainScreen].scale来获取,也可以设为0,系统就会自动设置正确的比例了。

注:UIGraphicsBeginImageContextWithOptions必须有对应的UIGraphicsEndImageContext结尾,不然会发生内存泄露问题

2)截取一个UIView或者其子类中的内容,并且以位图的形式(bitmap)保存到UIImage中

[viewController.view drawViewHierarchyInRect:rect afterScreenUpdates:YES];

注:自iOS7开始,UIView类提供了一个方法-drawViewHierarchyInRect:afterScreenUpdates:来完成上述操作

3)将图片保存到相册

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext(); //对应UIGraphicsBeginImageContextWithOptions函数
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

至此就可以完成截屏并将图片保存到设备相册中的功能

4.优化部分
以上操作只是将截屏的内容保存到相册,对于开发者来说,我们还需要考虑将屏幕中多余的内容在截屏前去除,截屏后再显示,比如返回按钮、相机按钮……,这样用户截屏后就会完整保存自己DIY的部分,而不是将屏幕中所有内容保存下来~~~

希望能给大家带来一些帮助!!!有什么需要讨论交流的可以私信+评论~~~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GameTomato

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值