Вопрос

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

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

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

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

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

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

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

Представление перетаскивается через вкладку справа

Благодарю вас!

Это было полезно?

Решение

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top