我正在尝试模仿Whatsapp应用中的UITextField
- 键盘关系。
正如大多数人所知,屏幕底部有一个固定的UITextField
,点击UITextField
时会出现键盘。当键盘出现时,UITextField
会粘在键盘上,并且它们可以非常顺畅地滑动。
阅读Apple的文档页面,这些页面是关于在键盘下移动视图的几次。
到目前为止我尝试过的内容:
收听键盘通知。我在动画块中使用了setFrame:
和setContentOffset:animated:
方法。没有像预期的那样好。键盘动画的UIViewAnimationCurve
值为7,我找不到它的含义,因为UIViewAnimationCurve
只有4个整数枚举类型。我认为键盘动画的动画曲线没有提供给开发人员,我希望我错了。
使用z-index值较低的自定义inputAccessoryView 。我有两个确切的UIViews
,一个固定在底部,另一个是自定义inputAccessoryView
,它将隐藏在固定的一个之下,因为它的zPosition
值较低。因此,用户不会看到inputAccessoryView
从屏幕外部出现,但固定视图被键盘推高了。但是没有用了。更改zPosition
值不会改变任何内容。
最后,我认为Whatsapp可能没有使用系统键盘而是自定义键盘。但如果是这种情况,那么这是一个非常糟糕的设计选择,以便消除选项。
任何人都知道Whatsapp(或环聊)是如何实现的?
答案 0 :(得分:2)
最直接的做法是证明这是正确的方法。
我应该在触发时听取keyboardWillShow
/ keyboardWillHide
次通知和animateWithDuration:
通知。我错过的一点是通过转移(<< 16)将UIViewAnimationCurve
投射到UIViewAnimationOptionCurve
。
NSDictionary *notification = [aNotification userInfo];
UIViewAnimationOptions curveValue = [[info objectForKey:UIKeyboardAnimationCurveUserInfoKey] unsignedIntegerValue] << 16;
...
[UIView animateWithDuration:{animation duration}
delay:0
options:curveValue
animations:^{
//animation code
}
completion:nil];
答案 1 :(得分:1)
值'7'不是2的幂,因此它不是特定的动画值,而是可能是多个动画值的总和(或按位或)。 解决方案(为我工作)是:
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:[info[UIKeyboardAnimationDurationUserInfoKey] floatValue]];
[UIView setAnimationCurve:[userInfo[UIKeyboardAnimationCurveUserInfoKey] intValue]];
// set view frame here
[UIView commitAnimations];
祝你好运:)