您的位置:首页 > 移动开发 > IOS开发

<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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: