2011-10-17 1 views
3

私はしばらくの間働いていて、ゲームを出荷しているエンジンは現在私の現在のプロジェクトを逆さまにして、すぐにUIViewを回転させます。私は、コードとのインタフェースを作成し、これは次のように、それがどのように見えるかについてです:問題は、私はUIInterfaceOrientationLandscapeLeftでアプリケーションを起動する場合にのみoccures私のアプリは逆さまになります

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{  
    ... 

    CGRect screenBounds = [[UIScreen mainScreen] applicationFrame]; 
    CGRect windowBounds = screenBounds; 
    windowBounds.origin.y = 0.0; 
    UIWindow* win = [[UIWindow alloc] initWithFrame:windowBounds]; 
    win.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

    UIMyView* view = [[UIMyView alloc] initWithFrame:screenBounds]; 
    UIMyViewController* controller = [[UIMyViewController alloc] init]; 
    controller.view = view; 

    view.multipleTouchEnabled = true; 
    view.windowWrapper = this; 
    view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

    [win addSubview:view]; 

    ... 
} 


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation; 
{ 
    s32 validOrientations = ((cViewMM*)(self.view)).windowWrapper->GetValidOrientations(); 
    if (toInterfaceOrientation == UIInterfaceOrientationPortrait && (validOrientations & 0x01)) 
     return true; 

    if (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown && (validOrientations & 0x02)) 
     return true; 

    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft && (validOrientations & 0x04)) 
     return true; 

    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight && (validOrientations & 0x08)) 
     return true; 

    return false; 
} 

。私が内部的にshouldAutorotateToInterfaceOrientation:を複数回呼び出すと、ウィンドウにビューを追加しようとしたときのアプリケーションのデバッグ。最初にUIInterfaceOrientationPortraitがfalseを返し、UIInterfaceOrientationLandscapeRightがtrueを返します(有効な向きなので)。次にUIInterfaceOrientationLandscapeLeftがtrueを返します(これは有効な向きであり、デバイスの現在の向きなので)。

ああ、もっと具体的には、これはiPad上ではなくiPhone上でのみ起こっています。彼らはこのビューを設定するために同じコードを使用します。

私は間違っていますか?

- EDIT -

私はshouldAutorotateToInterfaceOrientationの実行に関する間違っていたOK:それはその後、一度UIInterfaceOrientationLandscapeRightため、UIInterfaceOrientationLandscapeLeftため、UIInterfaceOrientationPortraitを求めて2回を3回実行し、再びUIInterfaceOrientationLandscapeLeft一度れます。

GameCenterは、この時点ではまだ初期化中です。追加のUIを追加しているので、それはそうかもしれないと思っていましたが、そうではありませんでした。

+0

「私は間違っていますか?あなたの頭に立っていない? =] –

+0

もしそれが私を助けるつもりなら。 – Aleks

答えて

25

サポートされている向きの配列が、で始まり、ポートレート(右上)であることをInfo.plistで確認します。別の向きで起動すると、アプリはその向きで起動します。

+0

UIInterfaceOrientationLandscapeLeft、UIInterfaceOrientationLandscapeRightは私のplistにあり、それらはこの順番になっています。私は最初の方向をデバイスの向きにしたいだけで、両方をサポートしたいと思います。 – Aleks

+0

ああ。うーん...私はそれのための確かな答えを持っていない。ステータスバーを表示しないと、デフォルトの画像を肖像画のように見せることができますが、これは完全な解決策ではありません。 – JoePasq

1

解決策を見つけました!

明らかにInterface Builderにバグがあります。すべての向きをクリックするだけで、Info.plistが正しく構築されます。

+0

私はすべてのインターフェイスがコードで作成されていると私はこのプロジェクトではInterface Builderを使用しないと言います。そして、私は問題がInfo.plistにあるとは思っていません。 UIInterfaceOrientationLandscapeLeftとUIInterfaceOrientationLandscapeRightの両方の向きをサポートしたいと思います。私はアプリケーションを起動するときにデバイスがあるという方向で起動する必要があります。 – Aleks

+0

問題はオリエンテーションをサポートするアプリケーションではなく、問題はシミュレータ自体が逆さまになっていることです。私は再びチャックして、シミュレータは間違いなくplistの順序に敏感です。 – tgunr

+0

私はエミュレータではなくiPhoneでテストしています。 – Aleks

0

私の場合、それはtgunrとして働いていましたが、私はシミュレータのフォルダからアプリケーション全体を削除しなければなりませんでした。そうでなければ、向きの変更は機能しませんでした。

2

私はこの同じ問題を抱えていて、それが返答されていないことを悲しんでいました。それから、私はこれが事態の仕組みであることを証明する重要なことを実現しました。Default.pngスタートアップイメージも逆さまです。あなたのアプリでそれを修正するための何もできません。どのランドスケープモードが正しく開始するかを選択できます(左または右のホームボタン)が、どちらのモードも正しく動作させることはできません。

+0

はい、あなたはdefault.pngについて正しいです。それはiPad上でうまく動作します。私は、この問題は古いiOSのバージョンにも存在しないと信じています(私はそれを実際に忘れてしまった)。 – Aleks

関連する問題