Iphone UIView第一次未设置动画
这段代码会在每次运行视图时设置其动画,第一次除外。显示或隐藏键盘时,将重新定位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
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以显示键盘后调用的。