IOS截屏功能的实现
实现方法一、
#pragma mark - 截屏按钮事件
- (IBAction)screenShotAction:(UIButton *)sender {
//_screenImg为一个UIImageView控件
_screenImg.image =[self screenView:self.view.window];//传值self.view.window就是截整个眼睛可以看到的界面
// _screenImg.image =[self screenView:self.view];//传值self.view 不包含导航栏和TabBar
}
#pragma mark - 截屏功能的实现
- (UIImage*)screenView:(UIView *)view{
CGRect rect = view.frame;
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[view.layer renderInContext:context];//如果传值self.view.window,整个界面都在截图中;如果传值self.view,截图无导航栏,无TabBar
//[self.navigationController.view.layer renderInContext:context];//如果传值self.view,注释上句,开启此句截图有导航栏,无TabBar
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
实现方法二、
#pragma mark - 全屏截屏功能的实现
- (UIImage *)getScreenshot {
CGSize imageSize = [[UIScreen mainScreen] bounds].size;
UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
for (UIWindow *window in [[UIApplication sharedApplication] windows]) {
if (![window respondsToSelector:@selector(screen)] || [window screen] == [UIScreen mainScreen]) {
CGContextSaveGState(context);
CGContextTranslateCTM(context, [window center].x, [window center].y);
CGContextConcatCTM(context, [window transform]);
CGContextTranslateCTM(context,
-[window bounds].size.width * [[window layer] anchorPoint].x,
-[window bounds].size.height * [[window layer] anchorPoint].y);
[[window layer] renderInContext:context];
CGContextRestoreGState(context);
}
}
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//保存图片到相册里面
// UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
return image;
}