5

私はUINavigationControllerを持っています。 VC1をrootViewControllerにして、VC1をVC1からプログラム的にロードした後、VC1からVC2に移動するカスタムアニメーションを作成します。標準。すべてが上品で良い。カスタマイズUINavigationControllerアニメーション:CATransition

さて、私はそうのように両者の間のカスタムアニメーションを持っているしたいと思います:VC2がその下にある間、合計で Custom animation

、VC1は視野の外にスライドします。最初のシート(VC1)をスライドさせてその下のシート(VC2)を表示するような用紙のように。

私が試みたのは、VC2からVC1に呼び出される次のコードです。

MyVC2 *vctwo = [[[MyVC2 alloc] init] autorelease]; 

CATransition *transition = [CATransition animation]; 
transition.duration = 1; 
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
transition.type = kCATransitionReveal; 
transition.subtype = kCATransitionFromRight; 
transition.delegate = self; 
[self.navigationController.view.layer addAnimation:transition forKey:nil]; 

[[self navigationController] pushViewController:vctwo animated:YES]; 

問題は、以下の通りである::

  1. VC2は、バックグラウンドで固定されていない。しかし、それには問題があります。それは(たとえ私がkCATransitionRevealを指定したとしても)一種のスライドです。私はバックグラウンドで完全に固定されたVC2になりたい。
  2. VC1がフェードアウトします。私はなぜそれが本当にわからない。私はkCATransitionFadeなどを使用しなかったので、フェードがどこから来るのかわかりません。

私が期待した結果を得られない理由があれば、非常に感謝します。申し訳ありませんが、これは明らかですが、私はこれを数時間試していて、本当に不満を感じました。

答えて

1

私はこれを行うための唯一の方法は、UINavigationControllerを忘れ、すべてを処理するために、私自身のメカニズムを思い付くことであるとします

This blog explains how...

ですから、VCの間のカスタムアニメーションしたい場合は、UINavigationControllerを使用していません。上記のように2つのVC間をスワップするサンプルコードを次に示します。

-(void)slideDoorOpenTo:(UIViewController *)aController duration:(float)aDuration { 

    [aController viewWillAppear:YES]; 
    [activeController viewWillDisappear:YES]; 

    //aController.view.alpha = 0.0f; 
    [self.view insertSubview:aController.view belowSubview:activeController.view]; // so that it is below activeController 

    [aController viewDidAppear:YES]; 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:aDuration]; 

    aController.view.transform = CGAffineTransformMakeTranslation(0,0); 
    activeController.view.transform = CGAffineTransformMakeTranslation(-320,0); 

    [UIView commitAnimations]; 

    [self performSelector:@selector(animationDone:) withObject:aController afterDelay:aDuration]; 


} 
3

animated:YESではなく[[self navigationController] pushViewController:vctwo animated:NO];を使用してください。

+0

ありがとう、私はそれを変更し、VC2はもう動かない。それについて考えるべきだった。フェードについてのどんな考えですか?私はまだフェードアウトアニメーションがどこから来ているのかわかりません。 –

+0

私はフェードが実際にはUINavigationControllerアニメーションの一部でありパーセルであると思います。私はそれを取り除くことはできません。 UINavigationControllerが実装しているカスタムフェードアニメーションを無効にする方法はありますか? –

関連する問題