質問

下部にドラッグ可能なuiviewが配置されたアプリがあります。ドラッグ可能なビューは完全にオフスクリーンではなく、ユーザーが上または下向きにドラッグできる「プルタブ」があります。現在は上下にドラッグしていますが、Apple通知が引き出しをスライドするのと同じ動作を与えたいと思います。

たとえば、ビューを50%上向きにドラッグして画面から指を取り外した場合、ドラッグ可能なビューを単独で上向きに動かしてほしいと思います。同様に、ユーザーがビューをドラッグアウトし、30%上向きにドラッグした場合、ビューはデフォルトの位置に戻る必要があります。

理想的には、私はドラッグアップ/ダウンを行うことができますが、動きは非常に「オーガニック」ではありません。

今、私は質問に関連する場合に備えて、UipangestureRecognizerを介して上方にドラッグしていることを達成しています。

それはおそらく、ドラッグ可能なビューのy位置を持ついくつかの賢い数学の線に沿って何か、そしていくつかのカアニメーションで動きの残りを行うのでしょうか?

視覚化が少し難しいかもしれないので、以下にいくつかの画面を追加しました。

下部にAビューがあるデフォルトの画面

右側のタブを介してドラッグされたビュー

ありがとうございました!

役に立ちましたか?

解決

あなたのとき UIPanGestureRecognizerの状態になります UIGestureRecognizerStateEnded, 、 使用 velocityInView: ジェスチャーの速度を見つけるためのメッセージ。

速度がゼロに近い場合、ビューの位置とビューの以前の状態に基づいて、ビューを開閉します。たとえば、ビューが閉じられ、10%以上引き出された場合は、開きます。開いていて、10%以上引き込まれている場合は、閉じてください。それ以外の場合は、それをその前の位置に戻します。

速度がゼロに近い場合は、Yコンポーネントのサインを使用して、ビューの新しい状態を決定します。サインが正の場合は、ビューを閉じてください。サインがネガティブな場合は、ビューを開きます。

「ゼロに近い」の定義が最適だと正確に把握するために実験する必要があります。

いずれにせよ、短い期間(おそらく.1〜.25秒)を使用して、ジェスチャーが終了した後、最終的な位置のビューをアニメーション化することをお勧めします。ビューが移動する必要がある速度と距離に基づいて、持続時間を選択することをお勧めします。システム通知パネルはこれを行います。 (ゆっくりとゆっくりと急速に下にドラッグしてみてください。手放したときにドラッグする速さに応じて、さまざまな速度で最終位置にアニメーション化します。)

あなたは最高のアニメーション曲線を見つけるために実験したいと思うでしょう(UIViewAnimationOptionCurveEaseOut, 、など)、そしてあなたが視野を開いているか閉じるかに応じて、ジェスチャーの速度と速度を閉じるかによって、別の曲線を使用することをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top