获取屏幕截图ScreenShot

本文介绍了在iOS中如何实现屏幕截图的一种方法,但遇到问题:使用获取上下文并针对View的Layer层渲染的方式,结果截取的屏幕总是显示为黑屏。文章探讨了关键的截图流程和可能的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法1:本人使用该方法以后截屏的结果总是黑屏

大致的流程就是通过获取上下文,并针对某一个View的Layer层进行渲染,获取上下文中的图片

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
    UIGraphicsBeginImageContextWithOptions(self.window.bounds.size, NO, [UIScreen mainScreen].scale);
else
    UIGraphicsBeginImageContext(self.window.bounds.size);

[self.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData * imgData = UIImagePNGRepresentation(image);
if(imgData)
    [imgData writeToFile:@"screenshot.png" atomically:YES];
else
    NSLog(@"error while taking screenshot");

方法2:目前正在使用该方法

关键的方法是

<span style="font-size:18px;"><strong>drawViewHierarchyInRect: afterScreenUpdates:</strong></span>

- (UIImage *) screenshot {

CGSize size = CGSizeMake(your_width, your_height);

UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);

CGRect rec = CGRectMake(0, 0, your_width, your_height);
[_viewController.view drawViewHierarchyInRect:rec afterScreenUpdates:YES];

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
原文地址: http://stackoverflow.com/questions/2200736/how-to-take-a-screenshot-programmatically

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值