0

私はコードを持っています:

ListViewController * listViewController = [[ListViewController alloc] initWithNibName:@"ListViewController" bundle:nil];    

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];
[self viewWillDisappear:YES];
[listViewController viewWillAppear:YES];

self.view.hidden = YES;
listViewController.view.hidden = NO;


[self viewDidDisappear:YES];
[listViewController viewDidAppear:YES];
[UIView commitAnimations];    

しかし、それは機能せず、listViewController は表示されません (この問題の解決策を誰か教えてください。

4

3 に答える 3

0

それは機能しません!

UIViewController を作成して割り当てるだけで、スタックにプッシュしたり、そのビューを表示可能なビューに追加したりしないでください。

listViewController.view.hidden を no に設定すると、魔法のように画面に表示されません。既に画面に表示されているビュー (またはウィンドウ) にビューを追加する必要があります...

ps beginAnimation は非推奨です: 代わりにブロック アニメーションを使用してください...

于 2012-07-30T13:53:11.917 に答える
0

不要なコードを削除して、これを書くだけで...

ListViewController * listViewController = [[ListViewController alloc] initWithNibName:@"ListViewController" bundle:nil];    
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];
[self.view addSubview:listViewController.view];
[UIView commitAnimations];
于 2012-07-30T13:39:24.377 に答える
0

次のようなものを試してください:

UIViewAnimationOptions ops = UIViewAnimationOptionTransitionFlipFromRight;
NSArray *temp = [[NSBundle mainBundle] loadNibNamed:@"NameOfNib" owner:self options:nil];
UIView* newView = [[temp objectAtIndex:0] view];
[UIView transitionFromView:self.view toView:newView duration:1.5 options:ops completion:nil];
self.view = newView; //Lets you control the new view from the current controller (you might want to save a reference to the old one if you need to change back)

meronix が言ったように、非ブロック ベースのアニメーションは、新しい iOS バージョンでは Apple によって推奨されていません。上記の方法は、それを行うための「承認された」方法です。

ご存知のように、viewWillAppearviewDidDisappear、および同様のメソッドは、ビューに何かをさせるために呼び出すメソッドではありません。これらは、これらのことが発生したときに自動的に呼び出されます。

あなたのコードにはいくつかの誤解がありました。以下にそれらについてコメントしました

//This looks fine (depending on what is in the nib)
ListViewController * listViewController = [[ListViewController alloc] initWithNibName:@"ListViewController" bundle:nil]; 

//Normally I use these to move things around, not change the view
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];

[self viewWillDisappear:YES]; //These two methods aren't things that you call
[listViewController viewWillAppear:YES];

self.view.hidden = YES; //If you're flipping or otherwise moving a view out of 
listViewController.view.hidden = NO; //sight then you don't need to hide/unhide views

[self viewDidDisappear:YES]; //Same as above, you don't call these
[listViewController viewDidAppear:YES];
[UIView commitAnimations]; 
于 2012-07-30T13:42:00.500 に答える