Перетащите UIView на полпути, затем он движется сам - PullRequest
4 голосов
/ 16 февраля 2012

У меня есть приложение с перетаскиваемым UIView, расположенным внизу.Перетаскиваемый вид не полностью за кадром, и у него есть «вкладка», которую пользователь может перетаскивать вверх или вниз.Перетаскивание вверх и вниз в настоящее время работает, но я бы хотел, чтобы оно имело то же поведение, что и выдвижной ящик уведомлений Apple.

Например, если я перетаскиваю вид на 50% вверх и убираю палец с экранатогда я бы хотел, чтобы перетаскиваемый вид продолжал двигаться вверх сам по себе.Аналогично, если пользователь только перетаскивает вид, скажем на 30% вверх, то вид должен опускаться обратно в положение по умолчанию.

В идеале, хотя я могу выполнять перетаскивание вверх / вниз, движение не очень"Organic" ....

Прямо сейчас, я выполняю перетаскивание вверх и вниз через UIPanGestureRecognizer, на случай, если это уместно для вопроса.

Возможно, это что-то вроде строкикакой-нибудь умной математики с позицией Y перетаскиваемого вида, а затем выполняющей остальную часть движения с некоторыми CAAnimations?

Это может быть немного трудно визуализировать, поэтому я добавил несколько экранов ниже.

Экран по умолчанию с видом внизу

Вид, перетащенный вверх через вкладку справа

Спасибо!

1 Ответ

7 голосов
/ 16 февраля 2012

Когда ваше UIPanGestureRecognizer состояние становится UIGestureRecognizerStateEnded, используйте сообщение velocityInView:, чтобы найти скорость жеста.

Если скорость близка к нулю, откройте или закройте представление на основена позиции представления и предыдущего состояния представления.Например, если представление было закрыто и было извлечено более 10%, откройте его.Если он был открыт и был вытянут более чем на 10%, закройте его.В противном случае верните его в положение перед жестом.

Если скорость не близка к нулю, используйте знак компонента Y, чтобы определить новое состояние вида.Если знак положительный, закройте вид.Если знак отрицательный, откройте представление.

Вам придется поэкспериментировать, чтобы точно определить, какое определение «близко к нулю» выглядит лучше всего.

В любом случае вам захочетсяанимируйте вид до его окончательного положения после окончания жеста, используя короткую продолжительность (вероятно, от 0,1 до 0,25 секунды).Вы можете выбрать продолжительность, основываясь на скорости и расстоянии, которое должен пройти вид.Панель системных уведомлений делает это.(Попробуйте перетащить его частично вниз медленно или быстро. Он анимируется до конечного положения на разных скоростях в зависимости от того, насколько быстро вы перетаскивали его, когда отпускаете.)

Вы захотите поэкспериментировать, чтобы найти лучшую анимациюкривой (UIViewAnimationOptionCurveEaseOut и т. д.), и вы можете использовать другую кривую в зависимости от того, открываете ли вы или закрываете представление, и от скорости жеста.

...