15

と を使用して、キーボードに沿ってビューをアニメーション化するために、UIKeyboardWillShowNotificationとを使用しUIKeyboardWillHideNotificationてアニメーションが表示されます。UIKeyboardAnimationDurationUserInfoKeyUIKeyboardAnimationCurveUserInfoKeyUIKeyboardFrameEndUserInfoKey

要素の開始位置が画面の下部にある限り、すべてが正常に機能します。私の要素 (スクリーンショットの入力ボックス) は UITabBarController の上で始まるため、アニメーションが開始すると、キーボードと UITextField の間にギャップがあり、アニメーションに沿って縮小し、最後に到達します。

私が探しているのは、「同じアニメーション カーブでアニメーション化しますが、キーボードが最大 Y 位置に達したら移動を開始します」のようなものです。

アニメーションを開始するための遅延を追加すると、イージングで正しくなくなり、これは将来の iOS リリースで壊れる可能性があります。

あなたのアイデアを私と共有していただければ幸いです。:-)

キーボードを閉じた キーボードを開いた キーボード アニメーション (ギャップを参照)

4

2 に答える 2

1

トムが提供したような詳細な解決策はありませんが、試してみることができるアイデアはあります. 私は自動レイアウトと制約を使って多くの興味深いことを行ってきました。スクロール ビュー内のアイテムを 1 つにあるもので制約することはできないことに注意してください。

したがって、プライマリビューがあります。それはテーブルビューまたはscrollView内の他のビューであると想定しているため、それに対処する必要があります。私が提案する方法は、ビューのスナップショットを取り、現在のビューを ivar (テーブル) に保存し、それを下部に固定されている「非常に背の高いコンテナー ビュー」に置き換え、スナップショットを含む UIImageView をこのビューと、constant=0 のコンテナー ビューとの間に制約があります。ユーザーにとっては何も変わりませんでした。

「inputAccessoryView」では、ビューがsuperViewに追加されると(およびウィンドウプロパティがある場合)、画像とコンテナビューの間の制約を削除し、テキストフィールドの下部を制約する新しいものを追加できます距離がある値よりも大きくなければならないinputAccessoryViewの上部に。これは、任意の contentValue に合わせて調整された scrollView 内のその textField のオフセットになるため、値を取得するにはいろいろ試してみる必要があります。次に、その制約をウィンドウに追加する必要があります (後で削除できるように ivar を保持します)。

過去に私はキーボードをいじりましたが、それがウィンドウに追加され、フレームがオフセットされているため、画面の下部のすぐ下にあることがわかります (iOS5 にありました) - scrollView にはありませんでした。

キーボードのスクロールが終了したら、画像ビューがスクロールした場所を確認し、オフセットを決定してから、画像ビューから実際のスクロールビューに切り替えます。

このスナップショット、アニメーション化、最終的に過去のビューの置き換えを行ったことに注意してください。これにはしばらく時間がかかりますが、うまくいくかもしれませんし、うまくいかないかもしれません - しかし、簡単なデモ プロジェクトを一緒に投げれば、キーボード入力アクセサリの制約を使用してコンテナ ビューで imageView 自体を移動できるかどうかをすぐに確認できます。見る。それが機能したら、「実際に」実行できます。

編集: Tom Swift が指摘したように、キーボードは別のウィンドウの "Z" レベルより高い位置にあるため、実際のキーボードとユーザー ビューの間の制約を直接接続する方法はありません。

ただし、キーボード通知では、サイズ、アニメーションの長さ、さらにはアニメーション カーブを取得できます。したがって、最初のキーボード通知を受け取ったら、新しい透過ビューを作成し、その上部が特別な「imageView」(スナップショット) ビューの下部になるように配置します。キーボードの長さと曲線の UIView アニメーションを使用すると、透明なビューがキーボードのアニメーションとまったく同じようにアニメーション化されますが、ウィンドウ内でアニメーション化されます。透明なビューに制約を配置すると、必要な動作を正確に実現できるはずです (iOS6)。本当に、この時点で iOS 5 をサポートします - まだアップグレードしていない 10 人のために?!?!?.

iOS5 をサポートする必要があり、この「バンプ」動作が必要な場合は、アニメーションが textField に「ヒット」するサイズにいつ到達するかを計算し、キーボードが動き始めるときに UIView アニメーションを遅延させて使用します。すぐには動きませんが、動くとキーボードを追跡します。

于 2013-11-06T22:29:46.150 に答える