4

私のアプリでは、カスタムアニメーションを使用して、それぞれが独自のXIBであるビューを切り替えようとしています。すべてのコードを保持するために親ビューとしてベースビューコントローラーを作成しましたが、これを機能させることができないようです。

アプリ内のすべてのビューコントローラー用にIBOutletを作成し、Interface Builderで、アウトレットを適切なコントローラーに接続しました。各コントローラーは適切なXIBもロードするため、問題はありません。問題は、次のビューコードの変更です。

これは私のコードです:

-(void)changeViews {
    CGRect frame = self.view.frame;
    frame.origin.x = CGRectGetMaxX(frame);
    theView4.view.frame = frame;

    [self.view addSubview:theView4.view];
    [self addChildViewController:theView4];

    [self transitionFromViewController:theView1 
                      toViewController:theView4 
                              duration:1 
                               options:UIViewAnimationOptionTransitionNone
                            animations: ^{
                                CGRect frame = self.view.frame;
                                theView4.view.frame = frame;
                                frame.origin.x -= frame.size.width;
                                self.view.frame = frame;
                            }
                            completion:completion:nil];

そして、これはコンソールのクラッシュです。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Children view controllers <MyGameViewController: 0x1dd25210> and <Settings: 0x1dd249d0> must have a common parent view controller when calling -[UIViewController transitionFromViewController:toViewController:duration:options:animations:completion:]'

誰かがこれを修正する方法を知っていますか?

ありがとう!

4

1 に答える 1

6

これを使用できます:

addChildViewController:子View Controllerを周囲のものに追加するために使用する場合。didMoveToViewController:また、別のコントローラーに配置されたことを子コントローラーに通知する必要があります。transitionFromViewController:toViewController:オプションでアニメーションを提供して、あるView Controllerを別のView Controllerに交換するために使用することもできます 。

これはhereから取得したものです(受け入れられた回答を完全に読むことをお勧めします)。

簡単に言えば、その親View Controllerに移動したことも通知する必要があります。

于 2012-04-18T12:01:15.243 に答える