很多时候我们需要允许用户对游戏进行截屏并保存到相册,尤其是带有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条)