なぜこの問題が発生しているのかよくわかりませんが、私は…基本的にnavigationController
、タブの1つにが付いたTabrバーコントローラーを持っています。この特定のタブでは、ユーザーがデバイスを回転させて、元のビューを回転させたのではなく、まったく異なるビューを表示できるようにしたいと思います。
これを(フルスクリーンで)達成するためLandscapeViewController
に、デバイスが横向きのときにモーダルに提示するものがあります。提示すると問題が発生しmodalViewController
ます…</p>
また、LandscapeViewController
ユーザーがポートレートモードに戻ったときに自分自身を却下できるように、向きも確認します。しかし、私がそれを提示すると、それがポートレートモードに入るというコールバックを受け取り、それは完全にそれを台無しにします!
何が起こっているのかを明確にするためのコードとログステートメントは次のとおりです。
PortraitViewController
(void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
NSLog(@"Norm going Portrait");
[self changeTheViewToPortrait:YES andDuration:duration];
}
else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft){
NSLog(@"Norm going Landscape");
[self changeTheViewToPortrait:NO andDuration:duration];
}
}
(void) changeTheViewToPortrait:(BOOL)portrait andDuration:(NSTimeInterval)duration {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:5.];
if(portrait){
NSLog(@"dismissed");
[self dismissModalViewControllerAnimated:NO];
}
else{
NSLog(@"presented");
LandscapeOverviewViewController *land = [[LandscapeOverviewViewController alloc]initWithNibName:@"LandscapeOverviewViewController" bundle:nil];
land.delegate = self;
[self presentModalViewController:land animated:NO];
[land release];
}
[UIView commitAnimations];
}
LandscapeViewController
(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
NSLog(@"Modal is going Portrait");
[self changeTheViewToPortrait:YES andDuration:duration];
}
else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft){
NSLog(@"Modal is going Landscape");
[self changeTheViewToPortrait:NO andDuration:duration];
}
}
(void) changeTheViewToPortrait:(BOOL)portrait andDuration:(NSTimeInterval)duration{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:duration];
if(portrait){
NSLog(@"calling delegate to dismiss");
[delegate landscapeViewController:self didRotateBack:(YES)];
}
[UIView commitAnimations];
}
これはログテキストです:
ノルムゴーイングランドスケープ
2010-08-24 15:29:40.024アプリ[32461:207]が発表されました
2010-08-24 15:29:40.026 App [32461:207]モーダルがポートレートになります
2010-08-24 15:29:40.026アプリ[32461:207]代理人に電話をかけて解雇
2010-08-24 15:29:40.027 App [32461:207]デリゲートが呼び出されました
縦向きで回転するとわかるように、を表示することで正しい動作をしますがlandscapevc
、縦向きであると見なして却下しようとします。
誰かが私がどこで間違っているのか見ることができますか?(そして、これの長さの方針ですが、コードのフォーマットはそうでなければ正しく機能しません。)