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 に答える