ジェスチャを使用して基本を既に実装できている場合は、ほぼ完了です。
正直なところ、私のアプリケーションではまさにこれを行っていますが、昔ながらの touchesBegan、touchesMoved などを使用しています。
ジェスチャーに関してはUIPanGestureRecognizer
、ドラッグを完全に制御できるように使用する必要があります。UISwipeGestureRecognizer
スワイプのみを認識します。
いずれにせよ、特定のポイントの後、ユーザーがドラッグした距離のほんの一部だけパネルを移動するだけです。
CGRect newPanelFrame = panel.frame;
if (newPanelFrame.origin.y + dragOffset > 275) {
newPanelFrame.origin.y += dragOffset / 2.0;
}
panel.frame = newPanelFrame;
touchesEnded:withEvent:
または_if (gestureRecognizer.state == UIGestureRecognizerStateEnded)
CGRect newPanelFrame = panel.frame;
if (newPanelFrame.origin.y > 275) {
newPanelFrame.origin.y = 275;
}
panel.frame = newPanelFrame;
を気にしたことがない理由UIPanGestureRecognizer
は、非累積的な変換 (translationForView: は累積的) を取得する方法を理解できなかったためです。これは、しきい値の後でドラッグを本質的に遅くしたい場合に必要です。