美文网首页
在截图时将UIView转化为PDF输出(截长图)

在截图时将UIView转化为PDF输出(截长图)

作者: Gxdy | 来源:发表于2019-10-16 18:27 被阅读0次

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

系统App截图样式

有关的Class

  • UIWindowScene要捕获PDF数据的窗口的窗口场景
  • UIScreenshotService用于协调窗口内容的PDF屏幕截图的创建
  • UIScreenshotServiceDelegate用来生成PDF数据的方法,这些方法与用户要求的屏幕快照一起

代码实现 demo下载

  1. 设置代理
    // 获取当前window的screenshotService
    UIScreenshotService *screenshotService = [UIApplication sharedApplication].keyWindow.windowScene.screenshotService;
    // 设置UIScreenshotService代理
    screenshotService.delegate = self;
  1. 实现代理协议
// 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);
}
  1. 真机(系统要求iOS 13+)截图查看,选择整页,如参考图示
    demo示例

相关文章

网友评论

      本文标题:在截图时将UIView转化为PDF输出(截长图)

      本文链接:https://www.haomeiwen.com/subject/movumctx.html