我有查看键入消息,如下所示。
现在,当我键入消息时,键盘出现,框应该在键盘上方移动,如下图所示。
我的问题 他们键盘动画和视图动画发生在不同的时间。键盘首先出现,然后出现视图。即使我试图将动画时间设置为任何时间,它们也会在不同的时间发生。
我该如何解决我的问题?
请建议我解决它的方法,以便键盘和视图动画显示它们是相同的视图。两个动画都应该在准确的时间出现,以便它们看起来像一次出现的相同视图。
我尝试了什么
我的观点确实加载了以下代码
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification object:nil];
现在键盘显示功能看起来像
- (void)keyboardWillShow:(NSNotification *)note{
NSDictionary* keyboardInfo = [note userInfo];
CGFloat duration = [[keyboardInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
[UIView animateWithDuration:duration animations:
^{
//chat_typingView is name for typing view
chat_typingView.frame = CGRectMake(chat_typingView.frame.origin.x,
238,
chat_typingView.frame.size.width,
chat_typingView.frame.size.height);
}
答案 0 :(得分:0)
也许你应该在做动画之前检查你的chat_typinfView是否是第一响应者并禁用Autolayout(非常重要)。
if ([chat_typingView isFirstResponder]) {
// Do the animation
}
PS建议订阅viewWillApper上的通知而不是viewDidLoad
答案 1 :(得分:0)
我在其中一个应用中有类似的设置,我会执行以下操作:
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardShowed:)
name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardHidden:)
name:UIKeyboardWillHideNotification object:nil];
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
/*** FOR AUTOLAYOUT MODIFICATIONS & ADDITIONS @ RUNTIME ***/
self.defaultViewFrame = self.myView.frame
}
- (void) keyboardShowed:(NSNotification*)notification {
//GET KEYBOARD FRAME
CGRect keyboardFrame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
//CONVERT KEYBOARD FRAME TO MATCH THE OUR COORDINATE SYSTEM (FOR UPSIDEDOWN ROTATION)
CGRect convertedFrame = [self.view convertRect:keyboardFrame fromView:self.view.window];
//..... do something with the convertedFrame (in your case convertedFrame.origin.y)
}
- (void) keyboardHidden:(NSNotification*)notification {
//RESTORE ORIGINAL STATE
[UIView transitionWithView:self.view
duration:.3f
options:UIViewAnimationOptionCurveLinear
animations:^{
self.myView.frame = self.defaultViewFrame;
}
completion:nil];
}