为自己的App适配iOS 13 截图API,当用户屏幕截图时,由App来提供该屏幕截图的PDF版本(如下图所示)

有关的
Class
-
UIWindowScene
要捕获PDF数据的窗口的窗口场景 -
UIScreenshotService
用于协调窗口内容的PDF屏幕截图的创建 -
UIScreenshotServiceDelegate
用来生成PDF数据的方法,这些方法与用户要求的屏幕快照一起
代码实现 demo下载
- 设置代理
// 获取当前window的screenshotService
UIScreenshotService *screenshotService = [UIApplication sharedApplication].keyWindow.windowScene.screenshotService;
// 设置UIScreenshotService代理
screenshotService.delegate = self;
- 实现代理协议
// MARK: - UIScreenshotServiceDelegate
- (void)screenshotService:(UIScreenshotService *)screenshotService generatePDFRepresentationWithCompletion:(void (^)(NSData * _Nullable, NSInteger, CGRect))completionHandler {
// 临时更改self.tableView.frame的frame,保证tableView能够完整的渲染出来
CGRect frame = self.tableView.frame;
CGRect toframe = frame;
toframe.size = self.tableView.contentSize;
self.tableView.frame = toframe;
// 将table view 渲染成PDF,参考:
NSMutableData *pdfData = [NSMutableData data];
UIGraphicsBeginPDFContextToData(pdfData, self.tableView.frame, nil);
UIGraphicsBeginPDFPage();
CGContextRef pdfContext = UIGraphicsGetCurrentContext();
[self.tableView.layer renderInContext:pdfContext];
UIGraphicsEndPDFContext();
// 恢复tableView frame
self.tableView.frame = frame;
// 输入PDF
completionHandler(pdfData, 1, self.tableView.bounds);
}
- 真机(系统要求iOS 13+)截图查看,选择
整页
,如参考图示
demo示例
网友评论