0

現在keyboardWillShow、通知を使用して、画面に表示さkeyboardWillHideれるユーザー インターフェイス要素をアニメーション化しています。UIKeyboard

メソッドを呼び出しています

- (void) animateElement: (UIToolbar*) toolbar up: (BOOL) up

通知で呼び出されるセレクターの内部がブロードキャストされます。メソッドはアニメーションを作成し、適切なレイヤーに追加します。

すべてがうまく機能しますが、要素が翻訳される前にキーボードが表示され、要素がビューから一時的に消えてから適切な場所に再表示されるため、トランジションが突然に感じられるため、視覚的なエクスペリエンスは期待外れです. アニメーションは、基本的にキーボード アニメーションによって隠されています。

Path のような他のアプリは、より優れたトランジションを備えており、より早く開始され、キーボードによって隠されません。それがどのように達成されたのか誰かいますか?通知を受け取る前に、アプリはキーボードが表示されていることを知る方法がないため、もっと早く呼び出す方法は考えられませんよね?

4

2 に答える 2

3

入力アクセサリ ビューをチェックしてください

self.myTextField.inputAccessoryView = self.uiViewforKeyboardAttachment;//Can be any uiview

これは、このテキスト フィールドの KB に自動的に付加されます。

これにより、ツールバーの自動アニメーション化を試みる必要性が軽減される場合があります。

または、NSNumber になる UIKeyboardAnimationDurationUserInfoKey のキーを持つ notification.userInfo 内でアニメーションの継続時間を使用することもできます。doubleValue はアニメーションの長さになります。

その辞書には、UIKeyboardAnimationCurveUserInfoKey、UIKeyboardFrameBeginUserInfoKey、および UIKeyboardFrameEndUserInfoKey も含まれます。

これらはすべて、アニメーション カーブと開始点と終了点への接続に役立ちます。

ただし、これらはウィンドウまたはウィンドウ内の最初のビューに関連していると思います。そのため、必ず知っておく必要があるビューに変換してください。

于 2012-06-26T21:18:37.910 に答える
3

実際の値についてまだ疑問に思っている人のために、私のコードは次のようになります。

[UIView animateWithDuration:0.25f
                      delay:0.0f
                    options:UIViewAnimationOptionCurveEaseInOut
                 animations:^
 {
     CGRect sendFrame = sendMessageToolbar.frame;
     sendFrame.origin.y = self.tableView.frame.size.height - KEYBOARD_HEIGHT;
     sendMessageToolbar.frame = sendFrame;
 }
                 completion:^(BOOL finished)
 {

 }];

エミュレーターでスロー アニメーションを有効にすると、完全に一致することがわかります。

于 2012-12-10T15:19:05.720 に答える