2009-04-10 10 views
1

Ich probiere eine Multiple-View-Anwendung aus, aber ich kann nicht scheinen, um den ersten View-Controller zu entfernen, wenn ich den neuen View-Controller einbringe. Ich lege den zweiten (kommenden) View-Controller auf den Index 0 und setze ihn einfach in den Hintergrund. Ich dachte, die [going.view removeFromSuperview] würde das Original Viewcontroller entfernen, aber das ist nicht das, was passiert ist ...ein View-Controller zu verschwinden

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]; 

Antwort

1

Zuerst ein wenig Refactoring:

coming = (answer ? boyController : girlController); 

Sie going löschen und transition, wie sie nur einmal verwendet werden. Um die Animation tatsächlich auszuführen, müssen Sie alles in den Kontext eines Animationsblocks stellen.

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

viewWillAppear: und viewWillDisappear: sind Delegatmethoden. Diese werden automatisch für die Delegierten dieser Ansichten aufgerufen, falls vorhanden. Sie sollten niemals manuell aufgerufen werden.

Verwandte Themen