1

私はoniphoneとipadを実行するユニバーサルアプリを作成しています。#defineを使用してCGRectを作成しています。そして、2つの異なる#defineを使用したいと思います。1つはiPhone用、もう1つはiPad用です。ユニバーサルアプリで正しいものが選択されるように、どうすれば宣言できますか.........。

混乱を避けるために、もう少し説明を更新する必要があると思います。WPConstants.hファイルがあり、すべての#defineを以下のように宣言しています。

#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)

上記のものはiphone用です。同様にiPadの場合、別の#defineが必要です。どうすればさらに先に進むことができますか?

4

2 に答える 2

2

Appleが推奨するように、使用してください

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ステートメントのどちらをコードに含める必要があるかを判断したい場合は、できません。ユニバーサル アプリには、iPhone と iPad 用の 2 つの個別のバイナリが含まれていません。これは 1 つのバイナリにすぎないため、プラットフォーム関連の決定はすべて実行時に行う必要があります。

于 2010-12-27T16:58:45.813 に答える
1

この関数を使用して iPad を検出し、アプリケーションのさまざまな部分すべての条件を記述しました。

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

また、iPhone/iPad 用に異なる xib ファイルをロードすることもできます。

于 2010-12-27T17:34:21.467 に答える