UIView第一次没有动画

时间:2013-09-01 16:38:13

标签: iphone ios objective-c uiview uiviewanimation

此代码在每次运行时动画我的视图,第一次除外。当显示或隐藏键盘时,重新定位UIView:

[UIView
animateWithDuration:0.26
animations:^{
    [self setupActiveOverlayViewFrame];
}completion:nil];

-(void)setupActiveOverlayViewFrame {
    float optimalOverlayHeight = [self.activePanel optimalHeight];

    float realOverlayHeight = MIN(optimalOverlayHeight, self.displayView.frame.size.height);

    if (self.activePanel.frame.size.height != realOverlayHeight) {
        self.activePanel.frame = CGRectMake(self.activePanel.frame.origin.x, 0, self.activePanel.frame.size.width, realOverlayHeight);
    }

    self.activePanel.center = [self correctCenterForOverlay];
}

我发布的方法只是为了表明它所做的只是重新调整尺寸并重新定位。

第一次运行此代码时,它不会设置动画。它只是跳到了位置。每次之后,它都会正确动画。

2 个答案:

答案 0 :(得分:0)

在您的视图完全设置之前,可能会调用“键盘确实显示”通知,就像您已将视图控制器推到导航控制器上并立即将文本视图重点放在viewDidLoad

您可以跟踪键盘何时启动或关闭以及调用viewDidAppear时,检查键盘是否已启动,然后运行它。或者,您可以推迟将焦点放在文本视图/字段中,直到调用viewDidAppear:为止。

答案 1 :(得分:0)

我遇到了同样的问题。我想建议你在(!)动画之前检查面板中心,找出它在第一次运行时的正确位置。如果不是。只需设置正确的位置。还可以尝试下一个代码

[self setupActiveOverlayViewFrame];
[UIView animateWithDuration:0.26
                 animations:^{
           [self.view layoutIfNeeded];
}completion:nil];

P.S。如果您使用autolayout更好地使用约束来使用上面的代码移动您的视图。