Есть ли способы обрабатывать и / или различать 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)
    }
}
Другие вопросы по тегам