我一直在玩iPad上的Split Keyboard框架。
好吧,只要显示或隐藏分割键盘,就会触发UIKeyboardWillChangeFrame
。
在停靠模式下,会触发UIKeyboardWillShow
和UIKeyboardWillHide
次通知。
在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的已知错误或我错过了什么。
希望有人可以向我指出事情。
感谢。
答案 0 :(得分:0)
我不确定你是否还有这个问题,但是你错过了一个通知。当用户开始移动键盘时,会发送UIKeyboardWillChangeFrame
。但是,此时,通知无法为您提供结束帧,因为用户尚未停止移动键盘。当用户停止移动键盘时,会发送另一个通知:UIKeyboardDidChangeFrameNotification
(至少在5.1上)。您应该能够在该通知中获得正确的结束帧。
答案 1 :(得分:0)
我考虑一下并写下Simple Gist example