#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 что объясняет эту методологию более подробно.