2012-03-21 8 views
4

は、JetBlue iPhoneアプリのように部分的に隠れたツールパネルを画面外からスライドさせる方法です。私は通常のスワイプジェスチャー認識機能でこれを行う方法を知っていますが、そのアプリには一定のしきい値があり、その後パネルは画面上の位置にスナップします。そうでなければ画面外に隠れます。JetBlue iPhoneアプリのように画面を静かにドラッグする方法

この種のスワイプ表示を実装するにはどうすればよいですか?スレッショルドの種類のジェスチャ認識機能を実装するにはどうすればよいですか?この種のUI操作を行うオープンソースプロジェクトはありますか?

答えて

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は:累積的です)これは基本的にしきい値の後にドラッグを遅くしたい場合に必要です。

4

私は書いたアプリに似たインターフェース要素を持っています。私のインターフェイス要素は、ツールパネル全体のUIViewControllerです。グリッパーのイラストの上にUIButtonを配置し、ボタンのタイプをカスタムに変更して視覚的に消えるようにします。私はタッチのドラッグを内側に接続し、タッチを外側にドラッグすると、ドラッグの移動先に応じてパネルの位置を調整するIBActionに接続します。私はTouch Up InsideとTouch Up OutsideをIBActionに接続して、ビューの位置を確定します。タッチアップイベントが底に近すぎると、パネルを閉じるだけです。そのしきい値より高いところで発生した場合、私はパネルを開きます。私はこれらの遷移を滑らかにするためにUIViewのアニメーションメソッドを使用します。 JetBlueアプリケーションに表示されているオーバー拡張要素は、ドラッグイベントハンドラで実行できます。パネルが限界に近づくにつれて、タッチの動きが大きくなるにつれて小さく、小さく表示されます。その後、ファイナライズでは、パネルをアニメーション化して、好みの終了位置に戻します。

私は小さなグリッパ領域を持っている点でJetBlueアプリは私のアプリケーションと異なりますが、JetBlueのアプリではパネル全体をスワイプして位置を調整できます。その機能に合わせるため、ボタンを使ってパネルを完全に覆うように実装を調整します。それぞれは私のドラッグイベントに応答し、ドラッグがフラグを設定することに加えて、その後、私のタッチアップイベントハンドラは、フラグが設定されているかどうかをチェックします。その場合は、パネルのドラッグを終了します。それ以外の場合は、各ボタンに関連する適切な操作を実行します。

+0

わかりやすい答え –

+0

IBActionメソッド内からタッチイベントの座標を取得するにはどうすればよいですか? – samsam

+1

@サムサム:IBActionメソッドは、3つのシグネチャ、パラメータなし、1つのパラメータ(送信側)、2つのパラメータ(送信側とタッチイベント)のいずれかを持つことができます。タッチ位置データを含むタッチイベントのバージョンを使用するだけです。 –

0

私は、同様の効果を達成するためにいくつかの研究を行っていましたが、この記事を偶然見つけ、結果としてJetBlueに試してみることにしました。

スライディングパネルでちょっと遊んだ後、私は実際にJetBlueの人たちが実際に少し違った方法でこれを実際に行ったと思っています。

JetBlueアプリケーションのスライダの動きは、UIGestureRecognizersのコレクションでできることよりもはるかに優れています。それはユーザーがそれをスワイプする速さに応じて異なる速度でアニメーションすることが可能であり、ゴムバンドはこれを適切に補償する。

私は実際にはUIGestureRecognizersを使用していないと思っていますが、そのパネルは実際にはアプリケーションウィンドウの一番下に並んだ標準のUIScrollViewです。デリゲート)は、スクロールビューが 'open'状態と 'shut'状態の間でアニメーションを停止することができないことを確認します。

関連する問題