2009-04-10 215 views
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]; 

回答

1

首先一点重构:

coming = (answer ? boyController : girlController); 

可以删除goingtransition,因为它们只用过一次。然后,要实际执行动画,您需要将所有内容放入动画块的上下文中。

[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:是委托方法。这些将在这些视图的代表中自动调用,如果有的话。他们不应该被手动调用。

相关问题