Swift — Как я могу определить расстояние жеста салфетки, чтобы отказаться?

#ios #swift #uiswipegesturerecognizer #swipe-gesture

#iOS #swift #uiswipegesturerecognizer #жест салфетки

Вопрос:

Как Instagram может обрабатывать расстояние жеста смахивания во время свайпа назад (процесс всплывающей навигации). Например, если это небольшое расстояние, вы можете отказаться от прокрутки назад, а затем снова вернуться к старому виду.

Интересно, если кто-нибудь объяснит, это было бы здорово.

Ответ №1:

Использование UIGestureRecognizer абсолютно нормально. Возможно, вы захотите взглянуть на документы Apple: https://developer.apple.com/reference/uikit/uigesturerecognizer/1619996-touchesmoved Этот метод возвращает UITouch, и снова из документов Apple вы можете видеть, что это UITouch представляет местоположение, размер, движение и силу пальца на экране для определенного события.

Ответ №2:

Я использую эту функцию для подсчета расстояния между двумя точками:

 //Distance
extension CGPoint {
    func distanceCount(_ point: CGPoint) -> CGFloat {
        return abs(CGFloat(hypotf(Float(point.x - x), Float(point.y - y))))
    }
}
  

Использование:

 let myDistance = p1.distanceCount(p2) //p1 is firstTouch and p2 is when user stops touching.
  

Затем вы можете сделать что-то вроде

     if distance < SomeValue {
   //Some code
 }
  

Надеюсь, это вам немного поможет.

Ответ №3:

Распознаватель жестов не определяет расстояние как таковое.

Скорее, вы бы переместили представление с помощью средства распознавания жестов, а затем, когда жест закончится, решите, переместился ли вид за пределы определенной точки, и предпримите соответствующие действия.

Итак, в простом примере вы можете проверить, переместился ли вид более чем на половину экрана:
если да, вы продолжаете перемещать его и переходите к другому виду;
если нет, вы настраиваете анимацию, чтобы вернуть вид к начальной точке.

Надеюсь, это поможет.

Возможно, вы захотите проверить:
https://www.raywenderlich.com/62435/make-swipeable-table-view-cell-actions-without-going-nuts-scroll-views что объясняет эту методологию более подробно.