4

JetBlue iPhoneアプリのように、部分的に隠されたツールパネルを画面外からスライドさせる方法を探しています。通常のスワイプジェスチャレコグナイザーでこれを行う方法は知っていますが、そのアプリには特定のしきい値があり、その後、パネルは画面上の位置に「スナップ」します。それ以外の場合は、画面外に隠れます。

この種のスワイプして表示を実装するにはどうすればよいですか?ただし、しきい値の種類のジェスチャレコグナイザーを使用しますか?この種のUI操作を行うオープンソースプロジェクトはありますか?

4

3 に答える 3

4

私が書いたアプリに同様のインターフェース要素があります。私のインターフェイス要素は、ツール パネル全体の UIViewController です。グリッパーの図の上に UIButton を配置し、ボタンのタイプをカスタムに変更して視覚的に非表示にします。Touch Drag Inside と Touch Drag Outside を、ドラッグの移動に応じてパネルの位置を調整する IBAction に接続します。Touch Up Inside と Touch Up Outside を、ビューの配置を確定する IBAction に接続します。タッチアップ イベントが下部に近すぎる場合は、パネルを閉じます。そのしきい値よりも高い場所で発生した場合は、パネルを開きます。これらの遷移を滑らかにするために、UIView のアニメーション メソッドを使用します。JetBlue アプリで見られるオーバー拡張要素は、ドラッグ イベント ハンドラーで実現できます。どんどんパネルが限界に近づくにつれ、タッチを高くするたびに、ビューが少しずつ開きます。次に、ファイナライズで、パネルをアニメートして、希望の終了位置に戻します。

JetBlue アプリは小さなグリッパー領域があるという点で私のアプリとは異なりますが、JetBlue のアプリではパネル全体をスワイプして位置を調整できます。その機能に合わせて、パネルをボタンで完全に覆うように実装を調整します。それぞれが私のドラッグイベントに応答し、ドラッグがフラグを設定するという追加がありました. 次に、修正イベント ハンドラーが、フラグが設定されているかどうかを確認します。その場合は、パネルのドラッグを終了します。それ以外の場合は、各ボタンに関連付けられた適切なアクションを実行します。

于 2012-03-21T20:37:19.260 に答える
3

ジェスチャを使用して基本を既に実装できている場合は、ほぼ完了です。

正直なところ、私のアプリケーションではまさにこれを行っていますが、昔ながらの 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: は累積的) を取得する方法を理解できなかったためです。これは、しきい値の後でドラッグを本質的に遅くしたい場合に必要です。

于 2012-03-21T21:08:20.363 に答える