Ios UIView在动画后未返回到正确位置
我有一个简单的Ios UIView在动画后未返回到正确位置,ios,animation,uiview,nsnotificationcenter,uikeyboard,Ios,Animation,Uiview,Nsnotificationcenter,Uikeyboard,我有一个简单的UITextField,当有人去编辑它时,键盘弹出,视图向上移动,以便用户可以看到他们输入的内容。但是,当我关闭键盘时,视图并没有返回到原始位置!我正在使用CGPoint属性捕获其在viewDidLoad上的原始位置,然后在键盘关闭时尝试将其设置回该位置 代码: - (void)viewDidLoad { [super viewDidLoad]; // Set the original center point for shifting the view
UITextField
,当有人去编辑它时,键盘弹出,视图向上移动,以便用户可以看到他们输入的内容。但是,当我关闭键盘时,视图并没有返回到原始位置!我正在使用CGPoint
属性捕获其在viewDidLoad
上的原始位置,然后在键盘关闭时尝试将其设置回该位置
代码:
- (void)viewDidLoad {
[super viewDidLoad];
// Set the original center point for shifting the view
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
self.originalCenter = self.view.center;
}
- (void)doneWithNumberPad {
[locationRadius resignFirstResponder];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.25];
self.view.center = self.originalCenter;
[UIView commitAnimations];
}
- (void)keyboardDidShow:(NSNotification *)note
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.25];
self.view.center = CGPointMake(self.originalCenter.x, 150);
[UIView commitAnimations];
}
调用
viewDidLoad
时,尚未为当前设备的屏幕大小或方向布置视图层次结构。现在查看self.view.center
还为时过早
在viewdilayoutsubviews
中执行此操作
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
self.originalCenter = self.view.center;
}
请注意,如果您支持自动旋转,即使在自动旋转时键盘可见时,也无法正常工作。如果您不需要绝对最终中心位置,使其工作的可靠方法是,在键盘显示时按您定义的固定值向上移动视图,在键盘隐藏时按该固定值向下移动视图
#define OFFSET 100
- (void)doneWithNumberPad {
[locationRadius resignFirstResponder];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.25];
self.view.center = CGPointMake(self.view.center.x, self.view.center.y + OFFSET);
[UIView commitAnimations];
}
- (void)keyboardDidShow:(NSNotification *)note
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.25];
self.view.center = CGPointMake(self.view.center.x, self.view.center.y - OFFSET);
[UIView commitAnimations];
}
幸好我不支持自动旋转!