如何解决iOS14上带有PKCanvasView绘图的PDFViewGestureRecognizer
用于将PKCanvasView
添加到PDFView
的最小代码。如果设置了PKCanvasView
,则PKDrawing
会正确显示。但是,在iOS14上,drawingGestureRecognizer
不会触发。在iOS13上运行
import UIKit
import PDFKit
import PencilKit
class ViewController: UIViewController {
@IBOutlet var pdfView: PDFView!
var scrollView : UIScrollView!
var pkView : PKCanvasView!
var docView : UIView!
var drawing : PKDrawing!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
setupPDF()
setupPencil()
}
func setupPDF() {
let fileURL = Bundle.main.url(forResource: "test",withExtension: "pdf")!
let pdfDocument = PDFDocument(url: fileURL)
pdfView.document = pdfDocument
}
func setupPencil() {
for scroll in self.allSubViews(in: self.pdfView,ofType: UIScrollView.self) {
self.scrollView = scroll
break
}
for view in self.allSubViews(in: self.scrollView,ofType: UIView.self) {
if "\(view)".starts(with: "<PDFDocumentView: ") {
self.docView = view
break
}
}
self.pkView = PKCanvasView(frame: CGRect(origin: CGPoint.zero,size: self.docView.bounds.size))
self.pkView.isOpaque = false
self.pkView.backgroundColor = .clear
self.docView.addSubview(self.pkView)
self.pkView.tool = PKInkingTool(.pen,color: .black,width:0.4)
self.pkView.overrideUserInterfaceStyle = .light
if let _drawing = self.drawing {
self.pkView.drawing = _drawing
}
self.scrollView.panGestureRecognizer.minimumNumberOfTouches = 2
self.scrollView.addGestureRecognizer(self.pkView.drawingGestureRecognizer)
}
func allSubViews<T: UIView>(in view:UIView,ofType type: T.Type) -> [T] {
var all: [T] = []
func getSubview(view: UIView) {
if let aView = view as? T {
all.append(aView)
}
guard view.subviews.count > 0 else { return }
view.subviews.forEach{ getSubview(view: $0) }
}
getSubview(view: view)
return all
}
}
仅供参考,页面是动态呈现的,可以从层次结构中添加和删除。如果您使用的是此代码,则在页面更改时需要bringSubviewToFront
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。