11

XCode4.5でiPadプロジェクトを開いたところです。私のアプリはランドスケープモードで実行するように設計されています。以前のバージョンのXCodeで完全に機能します。しかし、XCode 4.5では、画面の右側に空の領域があり、90°(1/4回転)回転します(私のビューは正しいサイズですが、画面の外に出ます)。次のようになります。

ビュー(赤)が90度回転し、横向きモードで画面が移動します

次の投稿を確認しましたが、役に立ちませんでした。

iOS6での向きの問題

ios6横向きから縦向きモードへの回転の問題

xcode 4.5 GMIOS6で向きを横向きに設定します

誰かがこの問題を抱えていましたか?

どんな助けでもいただければ幸いです!

4

6 に答える 6

6

返信ありがとうございます。私は最終的に解決策を見つけました。

まず、すべての起動画像がターゲットの概要メニューで正しい向きと正しいサイズになっていることを確認します (プロジェクトの青いアイコン => ターゲット => 概要 => 下部にスクロール)。サイズまたは向きが正しくない場合、正しく設定されていない起動イメージに関する警告が表示されます。

今まで、私はこの構造のプロジェクトを持っていました (古い XCode のやり方):

  • AppDelegate.hそしてM
  • RootViewController.hそしてM
  • aMainWindow-Iphone.xibおよびMainWindow-iPad.xib( RootViewControllerInterface Builder にリンクされています。以下のスクリーンショットを参照してくださいRootViewController) 。

それがどのように見えるかのスクリーンショットを以下に示します。

私の古いプロジェクト構造

そして、私の AppDelegate の applicationDidFinishLaunching: メソッドのコードは次のとおりです。

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

     [window addSubview:[rootViewController view]];
     [window makeKeyAndVisible];

}

私がやったことは、XCode 4.5 で空のプロジェクトを作成したときに得られる構造に近づけることです。その結果:

  1. を削除し、MainWindow.xibプログラムMainWindow-iPad.xibでウィンドウを作成しました(より明確で、どの画面のサイズにも合うようにします)
  2. 「メインnibファイルベース名」と「メインnibファイルベース名(iPad)」キーを削除しましたInfo.plist(およびに設定されMainWindow.xibていましたMainWindow-iPad.xib
  3. 空を追加RootViewController_iPhone.xibし、RootViewController_iPad.xib
  4. applicationDidFinishLaunchingメソッドのコードを次のように変更しました。

    - (void)applicationDidFinishLaunching:(UIApplication *)application {    
    
    NSLog(@"applicationDidFinishLaunching");
    
     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController_iPhone" bundle:nil];
    } else {
        self.rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController_iPad" bundle:nil];
    }
    
    self.window.rootViewController = self.rootViewController;
    
    [self.window makeKeyAndVisible];
    

    }

そして今、すべてが正常に動作します! 向きは iPad で正しいです。そして、それは以前よりもはるかに明確です:)非推奨のメソッドを変更する必要さえありませんでした

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

ところで、すべてのビューが全画面表示になるようにするには (iPhone 5 の場合)、Interface Builder でビューが [Scale to fill] モードに設定されていることと、[Autoresize subviews] がクリックされていることを確認してください。一部のビューが全画面表示にならない場合は、おそらくコントローラー/ビューを作成する順序が原因です (superView は、それ (superView) が作成されたときにのみサブビューに通知を送信します)。これを簡単に解決するには、次のコードを に追加します- (void)viewDidLoad method

CGRect screenBounds = [[UIScreen mainScreen] bounds];
    [self.view setFrame:CGRectMake(0,0,screenBounds.size.width,screenBounds.size.height)];

または使用:

[self presentModalViewController:myViewController animated:TRUE];

それ以外の:

[self.view.superview addSubview:myViewController.view];

presentModalViewController実際、サブビューにサイズ変更通知を送信します。

これが役立つことを願っています!

于 2012-10-09T23:51:32.777 に答える
4

window.rootViewController も設定していることを確認してください。私は同じ問題を抱えていましたが、この行は私のためにそれを修正しました:

MainViewController *mainView = [[MainViewController alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
window.rootViewController = mainView;
于 2012-10-08T21:31:33.920 に答える
0

アップグレードしたアプリでも同様の問題が発生しました。文書化されていませんが、変更があったようです。私が見つけたのは、新しいウィンドウがキーになって表示されるまで、回転やサイズを認識していないようだということです。フレーム設定を makeKeyAndVisible の直後に移動でき、すべてが機能しました。お役に立てば幸いです。

于 2012-10-09T03:14:18.647 に答える
0
[[yourViewController view] setFrame:CGRectMake(0.0, 0.0, 1024.0, 768.0)];
[[yourViewController view] setTransform:CGAffineTransformTranslate(CGAffineTransformMakeRotation(0.5*M_PI),128.0,128.0)];
于 2013-07-18T12:05:25.633 に答える
0

いくつかの簡単な手順を順番に実行するだけで、この問題を解決できます。

まず、AppDelegate.m で、rootViewController をサブビューとして追加しているかどうかを確認します。つまり、これの代わりに、

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

 [window addSubview:[navigationController view]];
 [window makeKeyAndVisible];

 }

このようなことをする

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

 window.rootViewController = navigationController;
 [window makeKeyAndVisible];

 }

ルート ビュー コントローラーとしてナビゲーション コントローラーを設定している場合。

次に、navigationController のプッシュされた viewController 内で回転メソッドを制御する必要がある場合は、次のように UINavigationController のカテゴリを作成します。

#import "UINavigationController+Rotation.h"

@implementation UINavigationController (Rotation)

- (BOOL)shouldAutorotate {

    BOOL result = self.topViewController.shouldAutorotate;

    return result;
}

- (NSUInteger)supportedInterfaceOrientations {

    return self.topViewController.supportedInterfaceOrientations;
}

@end

さて、iOS 6 上向きのこれら 2 つの向きの方法

-(BOOL)shouldAutorotateおよび
-(NSUInteger)supportedInterfaceOrientations

クラス内で呼び出されます。

これが必要なのは、

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

iOS 6 から廃止されました。

最後に、これらをビュー コントローラーに実装する必要があります。このようなもの:

-(BOOL)shouldAutorotate
    {
        return YES;
    }

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

ビューコントローラーが回転し、すべての向きをサポートできるようにする場合。

その他の方向マスクは次のとおりです。

  1. UIInterfaceOrientationMaskPortrait
  2. UIInterfaceOrientationMaskLandscapeLeft
  3. UIInterfaceOrientationMaskLandscapeRight
  4. UIInterfaceOrientationMaskPortraitUpsideDown
  5. UIInterfaceOrientationMaskLandscape および
  6. UIInterfaceOrientationMaskAllButUpsideDown
于 2013-11-21T07:16:31.810 に答える