2010-12-27 6 views
1

私はoniphoneとipadを実行する普遍的なアプリケーションを作成しています。 #defineを使ってCGRectを作成しています。そして私は、iPhoneとiPadの2つの異なる#defineを使いたいと思っています。 普遍的なアプリケーションで正しいものを選ぶように宣言するにはどうすればいいですか..........iPhone - ユニバーサルアプリケーションで#defineを使用する方法

私は混乱を避けるために少し詳しく説明しています。 私は上記のものはiphoneのためのものである

#define PUZZLE_TOPVIEW_RECT CGRectMake(0, 0, 480, 100) 
#define PUZZLE_MIDDLEVIEW_RECT CGRectMake(0, 100, 480, 100) 
#define PUZZLE_BOTTOMVIEW_RECT CGRectMake(0, 200, 480, 100) 

以下のように私はすべての#defineを宣言していWPConstants.hファイルをしました。同様にiPad用に異なる#defineを持たせたい どうすればさらに進めることができますか? Appleが推奨されているように

答えて

2

、プラットフォーム固有のコードを記述する

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { ... } 
else { ... } 

を使用しています。三?:演算子で、あなたも#defineにこれを組み込むことができる:

#define MyRect (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? CGRectMake(0,0,1024,768) : CGRectMake(0,0,480,320)) 

あなたのコードに含まれるべきである2つの#define文のどちらかを決定するために、条件付きコンパイルを使用したい場合は、することはできません:A普遍的なアプリは、iPhoneとiPad用の2つの別個のバイナリを含んでいません。これは単なるバイナリなので、実行時にすべてのプラットフォーム関連の決定を行う必要があります。

+0

ありがとうございました。あなたはCGRectMakeについて1つのrectだけ言及しました。私の更新された説明を見てください。 – Satyam

+0

さて、あなたは明らかにこのプロセスを3回繰り返すでしょう。ところで、私は '#define'sで動作しません。変数を宣言し、実行しているプラ​​ットフォームに従って変数を定義するだけではいかがですか。 –

+0

もう一度ありがとうございます。私が実行しているプラ​​ットフォームに変数を宣言する方法を教えていただけますか? – Satyam

1

私はこの機能を使ってiPadを検出し、アプリケーションのさまざまな部分の条件を書きました。

#ifdef UI_USER_INTERFACE_IDIOM 
    #define isPad() (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
#else 
    #define isPad() NO 
#endif 

iPhone/iPad用に別のxibファイルを読み込むこともできます。

+0

#ifdef UI_USER_INTERFACE_IDIOMはXcode 6.3以降ではプリプロセッサの定義ではなくなっています – k3a

関連する問題