0

画像とテーブルビューを含むビュー コントローラーがあります。このビュー コントローラから、全画面表示の画像を含むランドスケープ ビューにセグエを接続しました (グラフを全画面表示するために Apple の Stocks アプリを横向きにするときに使用したのと同じ考え方です)。

このセグエは、次のメソッドによって呼び出されます。

- (void)updateLandscapeView
{
    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
    if (UIDeviceOrientationIsLandscape(deviceOrientation) && !isShowingLandscapeView)
    {
        [self performSegueWithIdentifier: @"toGraph" sender: self];
        isShowingLandscapeView = YES;
    }
    else if (deviceOrientation == UIDeviceOrientationPortrait && isShowingLandscapeView)
    {
        [self dismissViewControllerAnimated:YES completion:nil];
        isShowingLandscapeView = NO;
    }
}

これに加えて、iPhone が縦向きの場合、テーブルビューをさらに数レベルドリルダウンすることもできます。問題は次のとおりです。これらの結果のレベルでは、向きを横向きにすると、横向きビューへのセグエがまだトリガーされます!...これが起こらないようにするにはどうすればよいですか? 画像を含む最初のビューから横向きモードにすることにのみ興味があります。

前もって感謝します!

4

1 に答える 1

1

あなたの問題が正しいかどうかはわかりません..しかし、「テーブルビューをドリルダウン」してナビゲーションコントローラー階層をさらに深くすることを意味する場合は、次のことを試すことができます..

それが(私が思うに)同様の状況で私がしたことです:

AppDelegate:

.h:

@property (nonatomic) BOOL shouldAutorotate;

.m:

// didFinishLaunchingWithOptions で:

self.shouldAutorotate = NO;

// まだ .m ファイルにあります

// Autorotation handling
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    return self.shouldAutorotate ?
    UIInterfaceOrientationMaskAllButUpsideDown :
    UIInterfaceOrientationMaskPortrait;
}

Portrait Controller を提示する Navigation Controller

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

- (NSUInteger)supportedInterfaceOrientations
{
    if (self.selectedViewController)
        return [self.selectedViewController supportedInterfaceOrientations];

    return UIInterfaceOrientationMaskPortrait;
}

- (BOOL)shouldAutorotate
{
    return YES;
}

Portrait View Controller (ここにも非常によく似たセグエ処理があります):

ビューに表示されます:

[(AppDelegate *)[[UIApplication sharedApplication] delegate] setShouldAutorotate:YES];

回転処理:

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

- (BOOL)shouldAutorotate
{
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

Landscape View Controller (おそらくフルスクリーン画像):

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

- (BOOL)shouldAutorotate
{
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

ナビゲーション コントローラー階層のより深い部分 (ポートレートのみが必要な場合):

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

- (BOOL)shouldAutorotate
{
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

なんとなく複雑に見えますが、それが唯一の方法で、iOS5と6の両方でこれらの回転を適切に機能させることができました。

于 2013-02-01T16:54:07.930 に答える