4

ビューコントローラーに関するiOSのドキュメントに従ってカスタムビューコントローラーコンテナーを作成していますが、関連する表示メッセージをviewWillAppear:自動的に転送する最初のビューコントローラーを表示するためのエレガントな方法を見つけるのに苦労しています。

を試してみるtransitionFromViewController:toViewController:duration:options:animations:completion:と、エラーが発生します。私は、アニメーションブロックを使用してビューをビュー階層にアニメーション化することに頼りました。これは、アピアランスメソッドの自動転送を中断しているようであり、適切なタイミングで電話をかける責任があることを意味します。外観と回転の方法を処理する画面に最初のビューを移行するためのより効率的な方法はありますか?fromViewController:nilUIViewviewWillAppear:ViewDidAppear:

私のコードは、最初のViewControllerでアニメーション化するために少しこのように見えます。

self.visibleViewController = [[UIViewController alloc] init];
[self addChildViewController:self.visibleViewController];

[self.visibleViewController viewWillAppear:YES];
[self.visibleViewController.view setAlpha:0];
[self.view addSubview:self.visibleViewController.view];

[UIView animateWithDuration:0.5 
                      delay:0 
                    options:UIViewAnimationOptionCurveEaseOut 
                 animations:^{
                     self.visibleViewController.view.alpha = 1;
                 }
                 completion:^(BOOL finished){
                     [self.visibleViewController viewDidAppear];
                     [self.visibleViewController didMoveToParentViewController:self];
                 }];
4

2 に答える 2

2

答えは、ずっとドキュメントに隠されていました。

のドキュメントUIViewController

- (void)beginAppearanceTransition:(BOOL)isAppearing animated:(BOOL)animated

とコンパニオン

- (void)endAppearanceTransition

viewWillAppear彼らのドキュメンテーションは、あなた自身のコードからそのようなものを決して呼び出さないと言っています。これらの方法でチェーンを適切に開始できます。

于 2013-01-28T11:12:40.950 に答える
0

システムが子ViewControllerにviewWillAppear/viewDidAppear / DidMoveToParentViewControllerメッセージを送信しないことを確認しますか?Appleドキュメントのこのビットは、次のことを意味します。

iOSがイベントを子ビューコントローラーおよびそれらのコントローラーが管理するビューに適切にルーティングするには、コンテナービューコントローラーは、子のルートビューをビュー階層に追加する前に、子ビューコントローラーをそれ自体に関連付ける必要があります。

私の読み方では、View Controllerを子として追加してから、子のルートビューをビューに追加すると、ViewControllerを追加するときにシステムが適切なメッセージを送信する必要があります。

これらのメソッドを手動で呼び出して、子View Controllerにブレークポイントを設定して、それらがまだ呼び出されるかどうかを確認してください。

于 2012-05-09T22:03:22.607 に答える