1

UINavigationControllerを縦向きでモーダルに表示するUIViewControllerが横向きにあります。モーダルセグエ接続を使用してViewControllerからNavigationControllerに移動すると、何らかの理由で、最初はView Controllerが強制的に縦向きになります(最初は横向きである必要があります)。セグエを外すと、期待通りに動作します。

望ましい動作は、横向きのインターフェイスから縦向きの別のインターフェイスへのモーダルセグエを使用することです。

ここで何が起こっているのか分かりますか?または、意図したとおりに機能させる方法は?

4

2 に答える 2

0

最初はナビゲーションコントローラーが縦向きに強制されているということですか?

これは、UIViewControllerサブクラスを使用して行いました。ここでは、縦向きのビューコントローラーがあり、横向きのビューコントローラーに対してモーダルセグエを実行します。重要なのは、2番目のコントローラーに私が望まない方向に自動回転しないように指示することでした。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}

それを設定できるようにするには、UINavigationControllerをサブクラス化する必要があると思います。

セグエはストーリーボードではモーダルとして定義されており、最初の(プレゼンター)ビューコントローラーのコードはかなり正常に見えます。

-(IBAction) zoomIn:(id)sender {
    [self performSegueWithIdentifier:@"ZoomIn" sender: self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"ZoomIn"]) {
        OSZoomViewController *zoom = [segue destinationViewController];
        zoom.image = ...;
        zoom.presenter = self;
    } 
}
于 2012-05-13T05:39:58.577 に答える
0

通知を使用します。

-(void)viewWillAppear:(BOOL) animated{
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(receivedRotate:) name: UIDeviceOrientationDidChangeNotification object: nil];
}

-(void) receivedRotate: (NSNotification*) notification
{
UIDeviceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation];
if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft)
{
  [self performSegueWithIdentifier:@"/* Segue from the VCPotrait to VCLandscape*/" sender: self];
}
}

セグエはモーダルでなければなりません。

于 2011-12-30T20:45:48.207 に答える