2011-10-17 94 views
3

我已經工作了一段時間並已發佈遊戲的引擎現在正在啓動我當前的項目,並立即旋轉UIView它的方式。我創建代碼的接口,這是它的樣子:如果我想發動在UIInterfaceOrientationLandscapeLeft應用我的應用程序開始顛倒

- (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; 
} 

問題只occures。通過應用程序進行調試時,它看起來像當我試圖將我的視圖添加到窗口內部時,shouldAutorotateToInterfaceOrientation:被多次調用。首先使用返回false的UIInterfaceOrientationPortrait,然後返回true的UIInterfaceOrientationLandscapeRight(因爲它是有效的方向),然後返回true(因爲它是有效的方向,它是設備的當前方向),然後返回UIInterfaceOrientationLandscapeLeft。

哦,更具體的說,這隻發生在iPhone而不是iPad上。他們使用相同的代碼來設置這個視圖。

我在做什麼錯?

- 編輯 -

OK我錯shouldAutorotateToInterfaceOrientation的執行:它是執行3次詢問UIInterfaceOrientationPortrait,2次UIInterfaceOrientationLandscapeLeft,再一次UIInterfaceOrientationLandscapeRight,再一次UIInterfaceOrientationLandscapeLeft。

GameCenter現在正在初始化,因爲它推動了一些額外的用戶界面,我認爲這可能是它,但事實並非如此。

+0

'我做錯了什麼?'不站在你的頭上? =] –

+0

如果它會幫助我會做到這一點。 – Aleks

回答

25

檢查您的Info.plist中支持的方向的數組是否以肖像(右側)開始。如果從任何不同的方向開始,您的應用程序將以該方向啓動。

+0

UIInterfaceOrientationLandscapeLeft,UIInterfaceOrientationLandscapeRight都在我的plist中,並且它們按此順序排列。我想支持這兩種方法,只是希望初始定位成爲設備的方向。 – Aleks

+0

啊。嗯...我沒有確切的答案。如果你沒有顯示狀態欄,那麼你可以讓你的默認圖像看起來像是肖像,但這不是一個完整的解決方案。 – JoePasq

1

找到解決方案!

很明顯Interface Builder中存在一個bug。如果您只需單擊所有方向,然後按照所需順序再次單擊它們即可正確構建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