Когда ваше UIPanGestureRecognizer
состояние становится UIGestureRecognizerStateEnded
, используйте сообщение velocityInView:
, чтобы найти скорость жеста.
Если скорость близка к нулю, откройте или закройте представление на основена позиции представления и предыдущего состояния представления.Например, если представление было закрыто и было извлечено более 10%, откройте его.Если он был открыт и был вытянут более чем на 10%, закройте его.В противном случае верните его в положение перед жестом.
Если скорость не близка к нулю, используйте знак компонента Y, чтобы определить новое состояние вида.Если знак положительный, закройте вид.Если знак отрицательный, откройте представление.
Вам придется поэкспериментировать, чтобы точно определить, какое определение «близко к нулю» выглядит лучше всего.
В любом случае вам захочетсяанимируйте вид до его окончательного положения после окончания жеста, используя короткую продолжительность (вероятно, от 0,1 до 0,25 секунды).Вы можете выбрать продолжительность, основываясь на скорости и расстоянии, которое должен пройти вид.Панель системных уведомлений делает это.(Попробуйте перетащить его частично вниз медленно или быстро. Он анимируется до конечного положения на разных скоростях в зависимости от того, насколько быстро вы перетаскивали его, когда отпускаете.)
Вы захотите поэкспериментировать, чтобы найти лучшую анимациюкривой (UIViewAnimationOptionCurveEaseOut
и т. д.), и вы можете использовать другую кривую в зависимости от того, открываете ли вы или закрываете представление, и от скорости жеста.