Поскольку лучшего решения не существует, я все еще использовал подход «итерации по жестам».
Код следующий:
gestureRecognizers?.forEach { (recognizer) in
if let longPressRecognizer = recognizer as? UILongPressGestureRecognizer {
longPressRecognizer.minimumPressDuration = Constants.DragLongPressMinimumDuration
}
}
Constants.DragLongPressMinimumDuration
- это Double
, определенное в Constants
struct.
Важное примечание : сделайте это в самом представлении коллекции (а не в ячейках) после настройки перетаскивания.
Решение работает нормально для версий iOS 11и 12.
Конечно, это на грани использования частного API, фактический класс этого распознавателя равен _UIDragLiftGestureRecognizer
(который является частью частного API и подклассом UILongPressGestureRecognizer
).Но поскольку мы приводим его к UILongPressGestureRecognizer
, технически мы не используем закрытый API.