6

UIPageViewControllerの向きを変更したときに、navigationOrientationを変更したいUIViewController。つまり、デバイスを縦向きに回転させたときに、navigationOrientationをからに変更UIPageViewControllerNavigationOrientationVerticalUIPageViewControllerNavigationOrientationHorizontalます。

ビューコントローラの回転でプロパティを設定しようとしましたが、プロパティが読み取り専用でnavigationOrientationあることがわかりました。navigationOrientation

これが私が欲しい画像です。

ランドスケープビュー ランドスケープビュー

ポートレートビュー ここに画像の説明を入力してください

私は何をすべきか ?

4

2 に答える 2

3

良い質問。

理由はわかりませんが、Apple がそのプロパティを変更することを望んでいないようです。技術的な理由か、ある種の UI ガイドラインのいずれかです。

とにかく、方向を変更できない場合は、別のアプローチを使用して、2 つ UIPageViewControllersの を使用し、それぞれ別のナビゲーション方向で 1 つのデリゲートを共有する必要があります。デバイスのターンでは、対応するビューを非表示/表示するか、デバイスのターンごとに新しいオブジェクトを初期化/解放します。

ところで。pageViewController:spineLocationForInterfaceOrientation:デリゲートのメソッドをご覧になりましたか。デバイスの向きの変化に反応するAppleの好ましい方法は次のとおりです。

説明このメソッドを使用して、デバイスの向きが変わったときにスパインの位置を変更したり、新しいビュー コントローラーを設定したり、両面状態を変更したりします。

このメソッドは、トランジション スタイルが の場合にのみ呼び出され UIPageViewControllerTransitionStylePageCurlます。

Apple のカレンダー アプリは、非常にスリムなページを縦向きに表示することに注意してください。これは、まさに彼らの UI のアイデアのようです。

于 2012-05-03T11:52:43.693 に答える
0

この問題を少し異なる方法で解決します。UIPageViewController クラスを継承し、次のように initWithCoder をオーバーライドします。

- (id)initWithCoder:(NSCoder *)aDecoder
{
    NSDictionary *options = nil;

    if ([self isLandscapeOrientation])
    {
        options = [NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:UIPageViewControllerSpineLocationMid] forKey:UIPageViewControllerOptionSpineLocationKey];
    }

    self = [super initWithCoder:aDecoder];

    return [super initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:options];
}

- (BOOL)isLandscapeOrientation
{
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];

    return UIInterfaceOrientationIsLandscape(orientation);
}
于 2012-05-15T19:03:15.383 に答える