0

我有一个项目,我正在与另一个视图切换一个视图:

- (IBAction)onClick:(id)sender
{
ViewControllerSecond * sc=[[ViewControllerSecond alloc]initWithNibName:@"ViewControllerSecond" bundle:nil];
[UIView transitionFromView:self.view toView:sc.view duration:3.0
                   options:UIViewAnimationOptionTransitionFlipFromLeft completion:^(BOOL finished) {

}];
}

我在这里用 3 秒来说明一点。在第二个视图中,我有一个方法来更新从视图控制器添加另一个视图的 GUI:

    -(void)updateGUI
{

    sample=[[ViewControllerSample alloc]initWithNibName:@"ViewControllerSample" bundle:nil];
    sample.view.frame=CGRectOffset(sample.view.frame, 0, 150);
    [self.view addSubview:sample.view];
}

现在,问题来了:当我从 viewDidLoad 函数调用它时——它工作得很好。但是,如果从 viewWillAppear 函数调用,视图将出现在屏幕顶部,并且只有在动画结束后才会跳转到它的位置。如何修复?

4

3 回答 3

0

把它放在 viewDidLoad 有什么问题?

从它的外观来看,顺序是加载,动画然后出现的委托方法。还要把你的 sample=[[ViewControllerSample alloc]initWithNibName:@"ViewControllerSample" bundle:nil]; 在您的第二个视图控制器的 init 部分。

或者,您可以在动画之前调用 updateGUI。所以在 [UIView 转换之前...

[sc updateGUI];
于 2012-11-08T11:29:28.577 回答
0

打个电话就行updateGUIviewDidLoad。不要在viewWillAppear. viewWillAppear如果你让它做太多的工作,会阻止你的视图出现。

于 2012-11-08T11:46:28.313 回答
0

答案分为两部分:

  1. 加载视图时更新,但这只会发生一次,因此要重新使用控制器,我必须再次调用它。
  2. 使用 isViewLoaded 查看视图是否已加载。如果是,则调用更新方法。
于 2012-11-09T11:33:20.993 回答