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];
}

幸好我不支持自动旋转!