Viewdidload工作,而viewwillappear延迟

时间:2012-11-08 10:32:53

标签: ios frame viewdidload viewwillappear

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

- (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函数调用,则视图将出现在屏幕顶部,并且只有在动画结束后才会跳转到它的位置。 如何解决?

3 个答案:

答案 0 :(得分:0)

把它放在viewDidLoad中是错误的吗?

从它的外观来看,订单正在加载,动画然后出现的委托方法。另外把你的sample = [[ViewControllerSample alloc] initWithNibName:@“ViewControllerSample”bundle:nil];在第二个视图控制器的init部分。

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

之前
[sc updateGUI];

答案 1 :(得分:0)

只需拨打updateGUI中的viewDidLoad即可。在viewWillAppear中做不了多少工作。 viewWillAppear如果你做了太多工作,就会阻止你的观看。

答案 2 :(得分:0)

答案分为两部分:

  1. 在加载视图时更新,但这只会发生一次,因此要重新使用控制器,我必须再次调用它。
  2. 使用isViewLoaded查看视图是否已加载。如果是,则调用更新方法。