Если вы уже можете реализовать основы с помощью жестов, то вы почти у цели!
Если честно, хотя я сделал именно это в своем приложении, я использую старомодные штрихи Beg, touchesMoved,и т. д.
С точки зрения жестов вам придется использовать UIPanGestureRecognizer
, чтобы иметь полный контроль над перетаскиванием.UISwipeGestureRecognizer
распознает только считывания.
В любом случае, после определенной точки вы просто переводите панель только на долю расстояния, на которое перетащил человек.
CGRect newPanelFrame = panel.frame;
if (newPanelFrame.origin.y + dragOffset > 275) {
newPanelFrame.origin.y += dragOffset / 2.0;
}
panel.frame = newPanelFrame;
In touchesEnded:withEvent:
или if (gestureRecognizer.state == UIGestureRecognizerStateEnded)
CGRect newPanelFrame = panel.frame;
if (newPanelFrame.origin.y > 275) {
newPanelFrame.origin.y = 275;
}
panel.frame = newPanelFrame;
Причина, по которой я никогда не беспокоился о UIPanGestureRecognizer
, заключается в том, что я никогда не мог понять, как получить некумулятивный перевод (translationForView: является накопительным), который необходим, еслиВы хотите существенно замедлить перетаскивание после порога.