8

ビューの特定の領域に2つのサブビューコントローラーのビューを表示するビューコントローラーがあります。2 つのサブ ビュー コントローラーは、FlopVC と FipVC です。

あるサブビューから別のサブビューへの遷移をアニメーション化したいと考えています。私が使用しているコードは次のとおりです。

-(IBAction)flip:(id)sender{

    UIViewController *newVC = nil;

    if (self.isFlip) {
        newVC = [[FlopVC alloc] initWithNibName:nil bundle:nil];
    }else{
        newVC = [[FipVC alloc] initWithNibName:nil bundle:nil];
    }

    newVC.view.frame = CGRectMake(120, 20, 240, 260);
    [self.view addSubview:newVC.view];

    [UIView transitionFromView:self.currentVC.view
                        toView:newVC.view
                      duration:0.9
                       options:UIViewAnimationTransitionFlipFromLeft 
                    completion:^(BOOL finished) {
                        self.currentVC = newVC;
                        self.isFlip = ! self.isFlip;
                    }];



}

サブビューは入れ替えられますが、アニメーションはありません。私は何を間違っていますか?

PS 完全なプロジェクトはこちらです。

4

3 に答える 3

19
UIView Animation TransitionFlipFromLeft != UIView AnimationOption TransitionFlipFromLeft
于 2011-10-29T16:26:00.813 に答える
3

新しい iOS5 ビュー コンテナー パラダイムを使用している場合は、次の行に沿って何かを行う必要があります。

-(IBAction)flip:(id)sender{

    UIViewController *newVC = nil;

    if (self.isFlip) {
       newVC = [[FlopVC alloc] initWithNibName:nil bundle:nil];
    }else{
       newVC = [[FipVC alloc] initWithNibName:nil bundle:nil];
    }

    newVC.view.frame = CGRectMake(120, 20, 240, 260);

    // required for the new viewController container
    self.currentVC willMoveToParentViewController:nil];
    [self addChildViewController:newVC];
    [self transitionFromViewController:self.currentVC
                  toViewViewController:newVC.view
                              duration:0.9
                               options: UIViewAnimationOptionTransitionFlipFromLeft 
                            animations:nil
                            completion:^(BOOL finished) {
                               // required for the new viewController container
                               [self.currentVC removeFromParentViewController];
                               [newVC didMoveToParentViewController:self];

                               self.currentVC=newVC;
                             }];



}

詳細については、 「コンテナー ビュー コントローラーの実装」セクションと UIViewController コンテナーに関する 2011 WWDC ビデオを参照してください。

于 2011-10-28T23:04:57.773 に答える
2

これは、(まったくの偶然によって)あなたが説明していることを正確に実行する作業コードです。私の 2 つの子 VC は に保存されていself->swappersます。整数curは、現在表示されているものを追跡します。サブビューが移動するインターフェイスのスポットは、ビュー アウトレットによってマークされますpanel

UIViewController* fromvc = [self->swappers objectAtIndex:cur];
cur = (cur == 0) ? 1 : 0;
UIViewController* tovc = [self->swappers objectAtIndex:cur];
tovc.view.frame = self.panel.bounds;

// must have both as children before we can transition between them
[self addChildViewController:tovc]; // "will" called for us
// note: when we call remove, we must call "will" (with nil) beforehand
[fromvc willMoveToParentViewController:nil];

[self transitionFromViewController:fromvc
                  toViewController:tovc
                          duration:0.4
                           options:UIViewAnimationOptionTransitionFlipFromLeft
                        animations:nil
                        completion:^(BOOL done){
                            // note: when we call add, we must call "did" afterwards
                            [tovc didMoveToParentViewController:self];
                            [fromvc removeFromParentViewController]; // "did" called for us
                        }];
于 2011-11-05T02:13:53.020 に答える