1

iPhone 5 の解像度でアプリをテストしたいので、シミュレーターを使用しています。私のアプリには、サポートされているデバイスの向きに縦向きと 2 つの横向きがあり、回転を許可する viewControllers はshouldAutorotateToInterfaceOrientationYES に設定されています。しかし、シミュレーターでデバイスを回転させても、デバイスのように回転しません。現在、私は標準の iPhone 4 シミュレーターを使用しています。

編集:これは、VC を設定するためのコードです。

UIViewController *vc = [[UIViewController alloc] init];
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:vc];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [self.window makeKeyAndVisible];
    [self.window addSubview:self.navigationController.view];

self.loadingWood = [[UIImageView alloc] init];
[vc.view addSubview:self.loadingWood];

そしてその直後:

self.timeline = [[JTimelineViewController alloc] init];
[self.navigationController setViewControllers:[NSArray arrayWithObject:self.timeline]];

これは、アプリの起動時のビジュアルに必要です。

編集2:

私は今これを機能させています。私が今直面している問題は、viewControllers の 1 つがこれを述べているにもかかわらず、iPhone シミュレーターで回転すると回転することです。

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

}

編集 3: 私の電話は iOS5 を実行しています。シミュレーターは iOS6 を実行しています。これが考えられる理由です。サポートされている方向として Landscape Left と Landscape Right を削除すると、シミュレーターの回転はまったくなくなりますが、私の iOS5 iPhone 4 は通常どおり回転し続けます。

4

2 に答える 2

1

次のように、ルート ビュー コントローラーを設定していることを確認します。

    self.window.rootViewController = self.navigationController;
于 2012-10-03T13:44:13.060 に答える
1

私は過去に似たようなことに対処しなければなりませんでした。何が起こっているかというと、アプリケーションのメイン ビュー コントローラーだけがローテーション通知とデリゲート呼び出しを受け取ります。UINavigationController のように、これらのイベントを現在のビュー コントローラーに渡す例外がいくつかあります。

したがって、たとえば、AppDelegate クラスがビュー コントローラーをロードし、そのビュー コントローラーが 2 番目のビュー コントローラーをプッシュする場合、その 2 番目のビュー コントローラーは回転通知を受信しません。

UINavigationController はローテーション デリゲートの呼び出しと通知を渡すため、UINavigationController を使用して UIViewControllers をディスプレイにプッシュすることをお勧めします。

編集

Xcode の設定では、[ダウンロード] タブの下に、以前のシミュレーター、iOS 5 および iOS 5.1 をダウンロードするオプションがあります。それらをダウンロードし、ターゲット iOS バージョンを 5.0 (または 5.1) に設定し、デバイス リストから正しいシミュレーターを選択します。iOS 6 シミュレーターと同じ問題が発生するかどうかを確認してください。それがわかれば、iOS 5 と iOS 6 の UINavs の処理方法には間違いなく違いがあります。

setViewControllersまた、との違いを使用すると、View ControllerpushViewControllerpushViewController親 View Controller の子として追加され、回転を含むデリゲート呼び出しに応答するようになります。iOS 5 以降、すべての UIViewController には、addChildViewControllerその機能をUIViewControllerクラスに提供するメソッドが呼び出されるようになりました。

于 2012-10-03T13:48:49.967 に答える