2012-04-13 13 views
1

我目前正在爲iOS設計一款cocos2d遊戲。目前我在運行時檢查它是否是運行ipad或iphone並調整座標et.c.爲了這。Ipad/Iphone版本,2個目標,1個代碼庫

但現在我想要兩個版本,一個用於iPad,一個用於iPod touch/iPhone。所以我想要兩個目標,但仍然使用相同的代碼庫。

目前我檢查

UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad 

,以確定是否該設備被使用。但是現在我想檢查使用哪個應用/目標。如果有人在iPad上使用iPhone版本,我不希望它針對iPad進行調整(iPhone版本的成本更低,因此不應該針對iPad進行調整)。

回答

0

如果對於iPhone應用程序目標,您將目標設備系列設置爲iPhone,即使在iPad上時,UI_USER_INTERFACE_IDIOM()也會始終返回UIUserInterfaceIdiomPhone。

1

在使用完全相同的代碼庫的同時,在不同目標中更改行爲的一種好方法是創建預處理器定義,並將其忽略到一個目標中,或在每個目標中對其進行不同設置。然後,您的代碼可以按不同方式編譯,以根據此定義更改其行爲(例如,如果使用#ifdef指令,則通過條件編譯)。

+0

謝謝你的回覆!在適用的情況下很難決定哪個答案標記爲正確。然而,上述答案在當時更爲方便。 – Sunkas 2012-06-29 13:58:36

+0

我現在正在製作一款新應用,一款適用於iPad和iPhone的通用應用,帶有兩個目標,一個完整版本和一個免費版本。在你的答案中,你說「在一個目標中忽略它」。如果我在這個文件中定義了一個常量(kIsFullVersion = YES),那麼將它包含在fullVersion中,不會在免費版本中出現編譯錯誤?一個解決方案是有兩個文件,但他們需要具有相同的文件名:S – Sunkas 2012-06-29 14:02:36

+1

您可以在代碼中使用#ifdef塊來檢查符號是否已定義,以便您不僅不會獲得一個編譯錯誤,但你可以根據它是否在目標中定義來改變代碼中的邏輯! – Clafou 2012-06-29 14:39:44

相關問題