iOS中如何解决捏合放大PDF时PKCanvas覆盖层模糊问题
PDF叠加PKCanvas放大后模糊的问题
我按照WWDC2021提供的方案实现了在每个PDF页面上叠加PKCanvas对象的功能。应用启动时,PDF及叠加的PKCanvas显示均正常,但捏合放大PDF时,PKCanvas会出现像素化、模糊的情况。

覆盖层创建代码
class MyPDFPage : PDFPage { var drawing: PKDrawing? } extension ReaderView { class Coordinator: NSObject, PDFPageOverlayViewProvider, PDFViewDelegate { var pageToViewMapping = [PDFPage: PKCanvasView]() func pdfView(_ view: PDFView, overlayViewFor page: PDFPage) -> UIView? { var resultView: PKCanvasView? = nil if let overlayView = pageToViewMapping[page] { resultView = overlayView } else { let canvasView = PKCanvasView() canvasView.backgroundColor = .clear canvasView.drawingPolicy = .pencilOnly canvasView.tool = PKInkingTool(.pen, color: .black, width: 1) resultView = canvasView pageToViewMapping[page] = resultView } if let page = page as? MyPDFPage, let drawing = page.drawing { resultView?.drawing = drawing } return resultView } } }
PDF视图创建代码
struct ReaderView: UIViewRepresentable { public typealias UIViewType = PDFView let url: URL let document: PDFDocument let pdfView = PDFView() init(_ url: URL) { self.url = url self.document = PDFDocument(url: self.url)! } func makeCoordinator() -> Coordinator { Coordinator() } func makeUIView(context: Context) -> PDFView { pdfView.displayDirection = .vertical pdfView.isInMarkupMode = true pdfView.pageOverlayViewProvider = context.coordinator pdfView.displayMode = .singlePageContinuous pdfView.usePageViewController(false) pdfView.backgroundColor = .clear pdfView.delegate = context.coordinator pdfView.document = document return pdfView } func updateUIView(_ uiView: PDFView, context: Context) { print(pdfView.scaleFactor) } }
我曾尝试设置canvasView.maximumZoomScale = 10,该操作能实现绘图放大,但底层PDF不再响应捏合输入,覆盖层会自行缩放,锚点位于页面左上角。

内容的提问来源于stack exchange,提问作者Matthias Schedel
相关产品推荐
相关产品推荐

