Я написал приложение для аннотаций в PDF в Swift с PDFKit, которое использует touchesBegan / Moved / Ended для создания аннотаций в PDF.Прекрасно работает для рисования аннотаций.
Чтобы получить события касания карандашом, мне нужно было сделать кнопку переключения, чтобы установить «isUserInteractionEnabled = false» в PDFView, если я делаю аннотации и устанавливаю «isUserInteractionEnabled = true» для навигации(панорамирование / масштабирование) документа PDF.При «isUserInteraction = true» все сенсорные события «съедаются» PDFView (я думаю, что это просмотр документов Scrollview) и никогда не вызываются в ViewController.
Постоянное переключение действительно раздражает пользователя и неМожно использовать.
Так как же использовать переопределения touchesBegan / Moved / Ended в ViewController и иметь возможность перемещаться (панорамирование / масштабирование) в PDF без касания пальцами без переключения isUserInteractionEnabled все время?
Приложение должно работать на iPad только карандашом.
Спасибо, что нашли время, Ларс
Пример реализации, чтобы прояснить ситуацию: (внутри класса ViewController: UIViewController)
override func viewDidLoad() {
super.viewDidLoad()
pdfView = PDFView()
pdfView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(pdfView)
pdfView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
pdfView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
pdfView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
pdfView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
let url = Bundle.main.url(forResource: "TestPDF", withExtension: "pdf")!
pdfView.document = PDFDocument(url: url)
pdfView.isUserInteractionEnabled = false //touches events are called ... annotation with pencil mode
//pdfView.isUserInteractionEnabled = true //touches events are NEVER called ... but pan/zoom works
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print("touchesBegan called!")
if let touch = touches.first {
if touch.type == .stylus {
print("touchesBegan pencil annotation ...")
}
}
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
print("touchesMoved called!")
if let touch = touches.first {
if touch.type == .stylus {
print("touchesMoved pencil annotation ...")
}
}
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
print("touchesEnded called!")
if let touch = touches.first {
if touch.type == .stylus {
print("touchesEnded pencil annotation ...")
}
}
}