Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UIView第一次未设置动画_Iphone_Ios_Objective C_Uiview_Uiviewanimation - Fatal编程技术网

Iphone UIView第一次未设置动画

Iphone UIView第一次未设置动画,iphone,ios,objective-c,uiview,uiviewanimation,Iphone,Ios,Objective C,Uiview,Uiviewanimation,这段代码会在每次运行视图时设置其动画,第一次除外。显示或隐藏键盘时,将重新定位UIView: [UIView animateWithDuration:0.26 animations:^{ [self setupActiveOverlayViewFrame]; }completion:nil]; -(void)setupActiveOverlayViewFrame { float optimalOverlayHeight = [self.activePanel optimalHe

这段代码会在每次运行视图时设置其动画,第一次除外。显示或隐藏键盘时,将重新定位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];
}
我发布的方法只是为了显示它所做的只是重新调整大小和位置

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

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


您可以跟踪键盘何时打开或关闭,以及何时调用
viewdide
,检查键盘是否打开,然后运行它。或者,您可以推迟将焦点赋予文本视图/字段,直到调用
viewdide:

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

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

注意:如果您使用的是autolayout,最好使用上面的代码使用约束来移动视图。

第一次如何调用它?是在视图初始化/演示期间,还是通过用户交互?是否实现了viewWillLayoutSubviews/viewDidLayoutSubviews方法?我在项目中遇到了问题,因为在设置视图动画时可以调用它们(我在那里重置了帧,这导致我的动画似乎不起作用,但只是有时)。不,这些都是在显示视图并点击UITextField以显示键盘后调用的。