Есть ли способы обрабатывать и / или различать Apple Pencil и прямые прикосновения в SwiftUI?
Мне интересно, есть ли способ обрабатывать события Apple Pencil в SwiftUI? Например, если вам нравится обрабатывать прямые прикосновения, а Apple Pencil - иначе, скажите "Прямое касание" для прокрутки, а Apple Pencil - для рисования линий.
Есть вопросы аналогичного типа.
Как обрабатывать события касания экрана с помощью SwiftUI?
Но DragGesture
, например, похоже, нет доступа к UITouch.TouchType
как атрибуты различать direct
, indirect
или pencil
.
Если нет возможности или дать мне какие-то гибридные методы с UIView, тогда да ладно...
Спасибо,
4 ответа
Я думаю, что лучший способ сделать это - создать собственный UIGestureRecognizer
. Таким образом вы можете переопределитьtouchesBegan
, touchesMoved
и так далее и получите доступ к UITouch
объект, который будет включать UITouch.TouchType
.
См. Пример кода Apple здесь, в частностиStrokeGestureRecognizer
класс.
Вот упомянутые вами гибридные методы. Это супер просто и мощно. Вы можете обернуть настраиваемый UIViewController, обрабатывающий touchEvents, и использовать его внутри SwiftUI. Все, что вам нужно сделать, это создать структуру, соответствующую
UIViewControllerRepresentable
.
https://developer.apple.com/documentation/swiftui/uiviewcontrollerrepresentable
Если вам нужно получить доступ к жесту UIKit с помощью SwiftUI. Эта ветка может помочь вам начать работу:
Обертывание UIView вокруг SwiftUI, что координаты касания и рисования теперь неправильно выровнены?
Вы будете использовать
UIViewControllerRepresentable
extension MTKView{
public override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print(touches.first?.type.rawValue)
}
}