<iOS>iPhone 应用里实现截屏功能的代码
2013-03-09 15:31
1021 查看
Phone 用户同时按下 Home 和锁屏键就能截屏,但在应用里总不能跳出一行字让用户自己按截屏键,支持高清分辨率:
UIView *view = [[[[[UIApplication sharedApplication] windows] objectAtIndex:1] subviews] lastObject];//获得某个window的某个subView
NSInteger index = 0;//用来给保存的png命名
for (UIView *subView in [view subviews]) {//遍历这个view的subViews
if ([subView isKindOfClass:NSClassFromString(@"UIImageView")] || [subView isKindOfClass:NSClassFromString(@"UIThreePartButton")]) {//找到自己需要的subView
//支持retina高分的关键
if(UIGraphicsBeginImageContextWithOptions != NULL)
{
UIGraphicsBeginImageContextWithOptions(subView.frame.size, NO, 0.0);
} else {
UIGraphicsBeginImageContext(subView.frame.size);
}
//获取图像
[subView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//保存图像
NSString *path = [NSHomeDirectory() stringByAppendingFormat:@"/%d.png",index];
if ([UIImagePNGRepresentation(image) writeToFile:path atomically:YES]) {
index += 1;
NSLog(@"Succeeded!");
}
else {
NSLog(@"Failed!");
}
}
}
第二种方式
UIImage* image = nil;
#if TARGET_IPHONE_SIMULATOR
CGSize imageSize = [view bounds].size;
if (NULL != UIGraphicsBeginImageContextWithOptions)
UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0);
else
UIGraphicsBeginImageContext(imageSize);
CGContextRef context = UIGraphicsGetCurrentContext();
[view.layer renderInContext:context];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
#else
CGImageRef screen = UIGetScreenImage();//
by smking, 使用这种方法前,需要在.m文件开始处,加入extern "C" CGImageRef UIGetScreenImage();,
这样才能使用UIGetScreenImage();函数
// by heqin, 本人测试过,在上传代码时,如果里面使用了这个方法,则会被拒,苹果认为这是个私有方法,2013.3.9
image = [UIImage imageWithCGImage:screen];
#endif
// by heqin, 另一个问题是, 上面两种方法都无法捕捉到当前屏幕中是用OpenGL绘制的情况,所以对于OpenGL的截屏,还需要进一步研究
再补充一个保存当前view到相册的方法
#import <QuartzCore/QuartzCore.h>
UIGraphicsBeginImageContext(currentView.bounds.size); //currentView 当前的view
[currentView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);
UIView *view = [[[[[UIApplication sharedApplication] windows] objectAtIndex:1] subviews] lastObject];//获得某个window的某个subView
NSInteger index = 0;//用来给保存的png命名
for (UIView *subView in [view subviews]) {//遍历这个view的subViews
if ([subView isKindOfClass:NSClassFromString(@"UIImageView")] || [subView isKindOfClass:NSClassFromString(@"UIThreePartButton")]) {//找到自己需要的subView
//支持retina高分的关键
if(UIGraphicsBeginImageContextWithOptions != NULL)
{
UIGraphicsBeginImageContextWithOptions(subView.frame.size, NO, 0.0);
} else {
UIGraphicsBeginImageContext(subView.frame.size);
}
//获取图像
[subView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//保存图像
NSString *path = [NSHomeDirectory() stringByAppendingFormat:@"/%d.png",index];
if ([UIImagePNGRepresentation(image) writeToFile:path atomically:YES]) {
index += 1;
NSLog(@"Succeeded!");
}
else {
NSLog(@"Failed!");
}
}
}
第二种方式
UIImage* image = nil;
#if TARGET_IPHONE_SIMULATOR
CGSize imageSize = [view bounds].size;
if (NULL != UIGraphicsBeginImageContextWithOptions)
UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0);
else
UIGraphicsBeginImageContext(imageSize);
CGContextRef context = UIGraphicsGetCurrentContext();
[view.layer renderInContext:context];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
#else
CGImageRef screen = UIGetScreenImage();//
by smking, 使用这种方法前,需要在.m文件开始处,加入extern "C" CGImageRef UIGetScreenImage();,
这样才能使用UIGetScreenImage();函数
// by heqin, 本人测试过,在上传代码时,如果里面使用了这个方法,则会被拒,苹果认为这是个私有方法,2013.3.9
image = [UIImage imageWithCGImage:screen];
#endif
// by heqin, 另一个问题是, 上面两种方法都无法捕捉到当前屏幕中是用OpenGL绘制的情况,所以对于OpenGL的截屏,还需要进一步研究
再补充一个保存当前view到相册的方法
#import <QuartzCore/QuartzCore.h>
UIGraphicsBeginImageContext(currentView.bounds.size); //currentView 当前的view
[currentView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);
相关文章推荐
- <iOS>iphone技术总结, 在网上找到比较有用的东东,整合一下
- 使用PHP实现密保卡功能实现代码<打包下载直接运行>
- iPhone 应用里实现截屏功能的代码
- UISearchDisplayController(iOS < 8.0)实例应用实现搜索功能和VC展示效果, 以及代理方法的介绍
- <iOS>NSXMLParser具体解析xml的应用详解
- <<精通iOS开发>>第14章例子代码彻底清除警告
- <a>标签点击实现下载文件功能
- iPhone 应用里实现截屏功能的代码
- <iOS>NSXMLParser具体解析xml的应用详解
- iPhone 应用里实现截屏功能的代码
- 使用PHP实现密保卡功能实现代码<打包下载直接运行>
- 最简单的struts2中使用<s:iterator>实现隔行变色代码[珍藏版]
- iPhone 应用里实现截屏功能的代码
- <填坑手册>Vuforia上架ios,以及分享功能注意事项
- iPhone 应用里实现截屏功能的代码
- <asp.net> 实现返回功能
- iPhone 应用里实现截屏功能的代码
- iPhone 应用里实现截屏功能的代码
- <iOS>iphone技术总结,整合一下
- <<精通iOS开发>>第14章例子代码小缺陷的修复