拆分键盘运动检测

时间:2012-04-19 05:23:38

标签: objective-c ios5 uikeyboard

我一直在玩iPad上的Split Keyboard框架。

好吧,只要显示或隐藏分割键盘,就会触发UIKeyboardWillChangeFrame

在停靠模式下,会触发UIKeyboardWillShowUIKeyboardWillHide次通知。

在NSNotification对象中,我们能够检索键盘的帧,对于停靠和分离模式都是如此。

现在真正的乐趣开始于我们在屏幕上移动分离式键盘。每次我们在屏幕上移动键盘时,通知对象的端帧都为(0,0,0,0)。我使用convertFrame坐标转换框架后,将(0,-124,0,0)更改为CGRect startFrame = [[[notif userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];。对于向上或向下方向的键盘移动都是如此。

在所有其他情况下,endframe似乎在框架上提供了正确的坐标。

此代码以点为单位给出了确切的框架。

CGRect endFrame = [[[notif userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];

CGRect convertedStartFrame = [self.view.window convertRect:startFrame toView:self.view]; CGRect convertedEndFrame = [self.view.window convertRect:endFrame toView:self.view]; This convertedEndFrame = (0,-124,0,0) when endFrame = (0,0,0,0).

当用户在屏幕上移动分割键盘时,此结束帧为(0,0,0,0)。

现在根据当前视图获取精确坐标:

{{1}}

还有一件事,我不是通过代码移动键盘。

我不确定,如果这是来自Apple的已知错误或我错过了什么。

希望有人可以向我指出事情。

感谢。

2 个答案:

答案 0 :(得分:0)

我不确定你是否还有这个问题,但是你错过了一个通知。当用户开始移动键盘时,会发送UIKeyboardWillChangeFrame。但是,此时,通知无法为您提供结束帧,因为用户尚未停止移动键盘。当用户停止移动键盘时,会发送另一个通知:UIKeyboardDidChangeFrameNotification(至少在5.1上)。您应该能够在该通知中获得正确的结束帧。

答案 1 :(得分:0)

我考虑一下并写下Simple Gist example