1

我正在尝试一个多视图应用程序,但是当我引入新的视图控制器时,我似乎无法让第一个视图控制器消失。我将第二个(即将到来的)视图控制器放置在索引 0 处,它只是将它放在后台。我认为 [going.view removeFromSuperview] 会删除原来的视图控制器,但事实并非如此......

UIViewController *coming = nil;
    UIViewController *going = nil;
    UIViewAnimationTransition transition;

    if (answer == YES)
    {
        coming = boyController;
        going = getInfoController;
        transition = UIViewAnimationTransitionFlipFromLeft;
    }
    else
    {
        coming = girlController;
        going = getInfoController;
        transition = UIViewAnimationTransitionFlipFromLeft;
    }
    NSLog(child);
    [UIView setAnimationTransition:transition forView: self.view cache:YES];
    [coming viewWillAppear:YES];
    [going viewWillDisappear:YES];
    [going.view removeFromSuperview];
    [self.view insertSubview:coming.view atIndex:0];
    [going viewDidDisappear:YES];
    [coming viewDidAppear:YES];

    [UIView commitAnimations];  
4

1 回答 1

1

首先进行一点重构:

coming = (answer ? boyController : girlController);

您可以删除goingand transition,因为它们只使用一次。然后,要实际制作动画,您需要将所有内容放在动画块的上下文中。

[UIView beginAnimations:@"flipAnimation" context:NULL];
[UIView setAnimationTransition:transition forView:self.view cache:YES];
[getInfoController.view removeFromSuperview];
[self.view addSubview:coming.view];
[UIView commitAnimations];

viewWillAppear:并且viewWillDisappear:是委托方法。如果有的话,这些将在这些视图的委托上自动调用。他们不应该被手动调用。

于 2009-04-10T15:34:10.557 回答