ios - PDFKit - PDFPageOverlayViewProvider 与 PKCanvasView 不转发触摸事件 - WWDC22 session 10089

标签 ios swift uikit ios-pdfkit pencilkit

我正在尝试利用PDFPageOverlayViewProvider PDFView的协议(protocol)PDFKit中的类(class)iOS 16 引入的框架,用于显示 PencilKit PKCanvasView位于 PDF 文档之上,以便用户可以在 PDF 上绘制内容。

我想要完成的事情基本上与 WWDC22 Session 10089 中所示的相同。 。遗憾的是,没有提供包含此功能的示例代码。

这是我的问题:我设法添加 PKCanvasView通过 PDFPageOverlayViewProvider 到 View 层次结构协议(protocol),但我无法绘制任何东西。我使用 this technique 调试了触摸事件触摸似乎被转发到 PDFDocumentView ,这是 PDFView 的内部 subview 和我的 PKCanvasView 的 parent .

View hierarchy from Xcode View debugger

enter image description here

如何确保使用 Apple Pencil 进行的触摸事件转发到 PKCanvasView无需禁用 PDFView 的滚动和平移功能?

最佳答案

这是解决方案: 将此代码放入overlayprovider的pdfView函数中:

   if (view.documentView != nil){
       for sv in view.documentView!.subviews {
           if (sv.theClassName == "PDFPageView" ){
               sv.isUserInteractionEnabled = true
           }
       }
   } 

对于theClassName,您应该像这样扩展NSObject:

extension NSObject {
    var theClassName: String {
        return NSStringFromClass(type(of: self))
    }
}

关于ios - PDFKit - PDFPageOverlayViewProvider 与 PKCanvasView 不转发触摸事件 - WWDC22 session 10089,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73960885/

相关文章:

ios - 临时 UIImage 从不清除

ios - 将图像添加到 CAShapeLayer

swift - performSegueWithIdentifier 并不总是在 Swift 中工作

ios - 警报的屏幕截图,iOS,Swift

ios - 没有调用 UIDropInteractionDelegate performDrop?

uikit - 检索 UIImage 的像素 alpha 值 (MonoTouch)

ios - 来自苹果的 APNS 警告,即使我没有在我的应用程序中使用 APNS

iphone - UIImage 元数据

ios - 尝试从方法返回协议(protocol)关联类型时出错

ios - 没有 reuseIdentifier 的 UITableViewCell