0

我想使用我自己的控制器在 uiviewcontrollers 之间导航。因此,我可以在我的视图之间进行自定义转换。

我做了一些有效的事情,但我不确定它是否正确?以后会不会出现与内存相关的问题?...我不确定所有内容都以正确的方式释放。

谢谢你的帮助!

这是我的代码:

在我的 AppDelegate 中,当它启动时:

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

在我的AppDelegate中,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];
                }
            }
     ];
}

我在 UIViewController 中切换视图如下:

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

1 回答 1

1

newVC 没有发布。

该块应保留 newVc 因此在您的 transitionWithView 之后您应该调用。(函数的最后一行)

[newVC autorelease];

那是假设 self.curVC 属性很强或保留

于 2012-07-23T12:19:15.230 回答