0

我目前正在使用通知来为用户界面元素设置动画keyboardWillShowkeyboardWillHide以响应UIKeyboard屏幕上的出现。

我正在调用一个方法

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

在使用通知调用的选择器内部进行广播。该方法创建动画并将它们添加到适当的层。

一切正常,但视觉上的体验令人失望,因为键盘出现在元素翻译之前,因此过渡感觉很突然,因为元素暂时从视图中消失,然后重新出现在正确的位置。动画基本上被键盘动画遮住了。

Path 等其他应用程序具有更好的过渡效果,启动速度更快,不会被键盘遮挡。有谁是如何实现的?我想不出早点调用它的方法,因为在收到通知之前,应用程序无法知道键盘出现了,对吧?

4

2 回答 2

3

查看输入附件视图

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

这将自动附加到此文本字段的 kb。

这可能会减轻您尝试自动为工具栏设置动画的需要。

或者你可以在 notification.userInfo 中使用动画持续时间,它有一个 UIKeyboardAnimationDurationUserInfoKey 的键,它是一个 NSNumber。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 回答