Скорость TouchDown по сравнению с TouchUpInside на самом деле не проблема. Проблема возникает, когда пользователи печатают обоими большими пальцами, а нажатия клавиш интерпретируются в неправильном порядке.
Клавиатура Apple по умолчанию регистрирует клавишу при касании. Но на iPhone, если вторая клавиша нажата, когда первая нажата, тогда первая клавиша регистрируется и не ждет ее касания. Это сохраняет ввод в порядке касания вниз (для набора текста двумя большими пальцами), но по-прежнему отражает поведение касания.
Чтобы реализовать это, вам необходимо наблюдать за событиями TouchDown и TouchUpInside.
Вот один из способов сделать это. Создайте свойство с именем pendingButton
для отслеживания последней нажатой кнопки и обработки этой кнопки либо при ее отпускании, либо при нажатии другой кнопки.
Вам потребуется подключить buttonDown
к событиям TouchDown и buttonUp
к событиям TouchUpInside.
// last button pressed down
var pendingButton: String?
// connect button TouchDown events here
@IBAction func buttonDown(_ sender: UIButton) {
// If we already have a pending button, process it before storing
// the next one
if let pending = self.pendingButton {
self.textDocumentProxy.insert(pending)
}
self.pendingButton = sender.currentTitle
}
// connect button TouchUpInside events here
@IBAction func buttonUp(_ sender: UIButton) {
// If the button being let up is the latest pending button,
// then process it, otherwise ignore it
if sender.currentTitle == self.pendingButton {
self.textDocumentProxy.insert(self.currentTitle!)
self.pendingButton = nil
}
}
Примечание. Вы также можете внимательно рассмотреть другие события, такие как TouchUpOutside. Вероятно, это также должно быть связано с buttonUp
в зависимости от желаемого поведения вашей клавиатуры.
Если вместо этого перетаскивание за пределы кнопки отменяет кнопку, то вам следует реализовать функцию для наблюдения за TouchDragExit, а затем отменить ожидающую кнопку, если это ожидающая кнопка.
// connect button TouchDragExit events here
@IBAction func dragExit(_ sender: UIButton) {
if sender.currentTitle == self.pendingButton {
self.pendingButton = nil
}
}
person
vacawama
schedule
01.04.2018