ios——如何完成截屏操作并将截屏结果保存到设备本地相册
ios工程——(UIView)获取设备相册权限截取屏幕内容并保存到设备本地相册设备/引擎:Mac(11.6)/cocos开发工具:Xcode(13.0)开发需求:对某个玩法进行截屏操作,并以图片形式保存到设备相册中很多时候我们需要允许用户对游戏进行截屏并保存到相册,尤其是带有DIY属性的玩法,用户更希望将自己的想法保存起来,所以添加截屏功能可以很好的提高用户体验。一般要完成截屏保存功能需要分以下几
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的部分,而不是将屏幕中所有内容保存下来~~~
希望能给大家带来一些帮助!!!有什么需要讨论交流的可以私信+评论~~~
更多推荐
所有评论(0)