目标 c,在一个动画中重新定位键盘上方的视图



我在屏幕底部有一个自定义视图,我想在键盘打开时将其重新定位在键盘上方。

我知道我可以注册"键盘被显示"通知,然后重新定位视图,或者按照苹果文档建议使用带有scrollRectToVisible滚动视图,但我对这两个选项的问题是它不是作为键盘动画的一部分完成的。我可以看到键盘出现,仅一秒钟后视图被重新定位或滚动到视图中。

我尝试的另一个选项是将此视图设置为文本视图im编辑的InputAccessory,这效果很好,但是一旦键盘关闭,我的视图将不可见,我需要它始终可用。

我想我可以创建此视图的两个实例,其中一个作为inputAccessory,另一个位于底部,但我真的不喜欢这个解决方案,并且这些视图的状态必须在两个实例之间同步

任何人都可以提出替代解决方案吗?

你最好使用UIKeyboardWillChangeFrameNotification通知。

首先添加观察者。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardFrameChange:) name:UIKeyboardWillChangeFrameNotification object:nil];

选择器将是...

- (void)keyboardFrameChange:(NSNotification *)notification {
    CGRect begin        = [[notification.userInfo valueForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
    CGRect end          = [[notification.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    CGFloat keyboardSize= begin.size.height;
    BOOL isShowing      = begin.origin.y > end.origin.y;
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:[notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]];
    [UIView setAnimationCurve:[notification.userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]];
    [UIView setAnimationBeginsFromCurrentState:YES];
    // do view animation here.
    [UIView commitAnimations];
}

视图和键盘的动画将同步。

最新更新