0

私は Xcode 4.5.2 で作業しており、ストーリーボードとセグエを使用して、iPad アプリの iOS6 をターゲットにしています。プリアンブル: 私のルート コントローラー (アプリ デリゲートによって読み込まれる) は、画像、アップグレード ボタン、および開くボタンのみを含むスプラッシュ スクリーンです。アプリの読み込みには数秒かかります。3 つのフルスクリーン コントローラすべてに shouldAutorotate と supportedInterfaceOrientations があります。回転通知のために、ルート ビュー コントローラーで次の 2 つのメソッドを使用しています。

- (void)awakeFromNib
{
    [UIDevice.currentDevice beginGeneratingDeviceOrientationNotifications];
    [NSNotificationCenter.defaultCenter addObserver:self
                                       selector:@selector(orientationChanged:)
                                           name:UIDeviceOrientationDidChangeNotification
                                         object:nil];
}

- (void)orientationChanged:(NSNotification *)notification
{
    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
    if (UIDeviceOrientationIsLandscape(deviceOrientation))
    {
        // Landscape
        CGRect rect = _libraryViewController.libraryTableBorder.frame;
        _libraryViewController.libraryTableBorder.frame = rect;
        _libraryViewController.libraryTableBorder.image = [UIImage imageNamed:@"LibraryBorder_L.png"];
    }
    else if (UIDeviceOrientationIsPortrait(deviceOrientation))
    {
        // Portrait
        CGRect rect = _libraryViewController.libraryTableBorder.frame;
        _libraryViewController.libraryTableBorder.frame = rect;
        _libraryViewController.libraryTableBorder.image = [UIImage imageNamed:@"LibraryBorder_P.png"];
    }
}

LibraryViewController にこれらとまったく同じメソッドがあり、完全に機能します。libraryTableBorder の呼び出しなしで同じメソッドを持つ別のメイン ビュー コントローラー (entryView) があります。デバイスがエントリ ビューから、またはエントリ ビューに移動する際の回転に関係なく、テーブルの境界線は正しくスワップ アウトされます。また、ライブラリから entryView またはスプラッシュに移動すると、ビューは正しくなります。

この問題は、ランドスケープのスプラッシュ ビューからライブラリに移行しています。Potrait でライブラリに移動すると正常に動作し、表示される境界線は縦方向の境界線です。ただし、横向きの場合は、縦向きの境界線も表示されます。横向きのルート ビューからライブラリの境界線を横向きに表示するにはどうすればよいですか?

この難問を解決するための助けをいただければ幸いです!!!

4

1 に答える 1

0

この問題の解決策を見つけました...

iOS6 のリリース ノートを指す別のスレッドに促されました。UIDeviceOrientation と if/else ステートメントを追加しました。どのビューに移動したか、どのビューから来たかに関係なく、境界線が正しく回転するようになりました!

- (void)viewWillLayoutSubviews
{
    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
    if (UIDeviceOrientationIsLandscape(deviceOrientation))
    {
        // Landscape
        CGRect rect = _libraryTableBorder.frame;
        _libraryTableBorder.frame = rect;
        _libraryTableBorder.image = [UIImage imageNamed:@"LibraryBorder_L.png"];
    }
    else if (UIDeviceOrientationIsPortrait(deviceOrientation))
    {
        // Portrait
        CGRect rect = _libraryTableBorder.frame;
        _libraryTableBorder.frame = rect;
        _libraryTableBorder.image = [UIImage imageNamed:@"LibraryBorder_P.png"];
    }
}

これは確かに私にとってイライラする問題でした。これが他の誰かに役立つことを願っています!

于 2013-01-23T15:09:22.860 に答える