drn
drn

Reputation: 439

Is it right to switch in between UIViewController that way?

I want to use my own controller for navigating in between uiviewcontrollers. So like that I can have custom transitions in between my views.

I did something which is working but I'm not sure if it is the right way? Could there be problems related to memory later?...I'm not sure everything is deallocated the right way.

Thanks for your help!

Here is my code:

In my AppDelegate, when it starts:

self.rootVC = [[[MenuView alloc] initWithNibName:@"MenuView" bundle:nil] autorelease];
[self.window addSubview:self.rootVC.view];

In my AppDelegate, the method for switching in between UIViewController:

-(void) changeRootController: (NSString*) ctrlName{

    UIViewController *oldVC = self.curVC;
    UIViewController *newVC;

    if(ctrlName == @"Studio"){
        newVC = [[StudioView alloc] initWithNibName:@"StudioView" bundle:nil];
    }
    else if(ctrlName == @"Menu"){
        newVC = [[MenuView alloc] initWithNibName:@"MenuView" bundle:nil];
    }

    self.curVC = newVC;

    [UIView transitionWithView:self.window
            duration:1.0
            options:UIViewAnimationOptionCurveEaseIn
            animations:^{
                newVC.view.transform = CGAffineTransformConcat(newVC.view.transform, CGAffineTransformMakeTranslation(-1024, 0));
                [self.rootVC.view addSubview:newVC.view];
                newVC.view.transform = CGAffineTransformConcat(newVC.view.transform, CGAffineTransformMakeTranslation(1024, 0));
                oldVC.view.transform = CGAffineTransformConcat(oldVC.view.transform, CGAffineTransformMakeTranslation(1024, 0));
            } 
            completion:^(BOOL finished){
                if(finished){
                    [oldVC release];
                }
            }
     ];
}

And I switch views in my UIViewController as follow:

AppDelegate *ad = (AppDelegate*)[[UIApplication sharedApplication] delegate];
[ad changeRootController:@"Studio"];

Upvotes: 0

Views: 104

Answers (1)

bigkm
bigkm

Reputation: 2277

newVC isn't released.

The block should retain the newVc so after your transitionWithView you should call. (last line of function)

[newVC autorelease];

Thats assuming that the self.curVC property is strong OR retained

Upvotes: 1

Related Questions