Где находятся распознаватели жестов для отменить / повторить жесты iOS 13? - PullRequest
3 голосов
/ 24 октября 2019

Новое в iOS 13, три жеста интерпретируются как просьба отменить и повторить:

  • Двойное касание тремя пальцами означает отмену.

  • Проведите пальцем влево тремя пальцами, чтобы отменить.

  • Стрелка вправо тремя пальцами означает, верните.

Где находятся средства распознавания жестов, которые обнаруживают эти жесты? Что бы я сделал, чтобы переопределить их, отключить или сделать выбор между ними и моими собственными жестами?

Ответы [ 2 ]

2 голосов
/ 25 октября 2019

Похоже, что есть частный класс UIUndoGestureRecognizer, который присоединен к UIEditingOverlayGestureView, который находится в UIInputSetContainerView внутри UITextEffectsWindow. (Чтобы понять это, я поместил точку останова в обработчик UndoManager registerUndo и попытался провести пальцем влево тремя пальцами, а затем копался в полученном коде трассировки стека и ассемблера, пока не нашел экземпляр распознавателя жестов.)

Вы, вероятно, могли бы использовать методы в UIGestureRecognizerDelegate для арбитража между вашими распознавателями жестов и этими системными, и вы могли бы переопределить editingInteractionConfiguration в вашем контроллере представления или представлении, чтобы вернуть .none, чтобы просто повернуть ихполностью выключен.

0 голосов
/ 24 октября 2019

Чтобы определить, когда пользователь выполняет жесты отмены / повтора:

Он унифицирован через систему, поэтому он полностью бесплатен, если вы используете UndoManager ( Подробнее ) илиNSUndoManager. Так что, если вы реализуете его как использование shakes, он работает и для жеста.

Чтобы изменить поведение жеста (чтобы предотвратить конфликт с другими жестами приложения)

Вы можете изменитьконфигурация этого с этой переменной:

public protocol UIResponder {
    var editingInteractionConfiguration: UIEditingInteractionConfiguration
}

это перечисление:

public enum UIEditingInteractionConfiguration {
    case `default` // System behavior 
    case none // Disable
}

Так что это будет отключить как:

override var editingInteractionConfiguration: UIEditingInteractionConfiguration { .none }

Sorce:

WWDC 2019 - Модернизация вашего пользовательского интерфейса для iOS 13 - 37: 00

Обратите внимание, что есть куча других жестовв iOS 13, например, сжимая 3 пальца в , вы скопируете выделенный текст и ущипните их из вставит его. Все они связаны с действиями старого стиля (например, классическим действием встряхнуть ) вместе с этим протоколом, и вы можете переопределить его в любом responder.

Apple, вызовите все эти Редактирование жестов и вы можете увидеть сеанс здесь

Примечание:

Некоторая информация в этом сеансе не является чисто истинной (например, UIResponder - это не protocol, это на самом деле class, как @matt упомянул в комментариях. Но я добавил источник этого ответа, и вы можете судить сами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...