2011-08-11 11 views
2

デバイスがiPadの場合、Preprocessor-Ifsでチェックしようとしています。 iPadの場合、Devicespecificを定義したいのですが、何らかの理由でPP-ConstantがtrueならPP-IFをチェックインできません。プリプロセッサ - IFが動作しない

多分あなたはアイデアを持っていますか?

#ifdef UI_USER_INTERFACE_IDIOM 

    #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 

#else 

    #define IS_IPAD false 

#endif 



#if IS_IPAD 

    #define WIDTH 768 
    #define HEIGHT 1024 

#else 

    #define WIDTH 320 
    #define HEIGHT 480 

#endif 

答えて

11

アプリを作成する前に、プリプロセッサのルールが処理されています(驚き)。普遍的なアプリだから、それがiPadかiPhoneで動いているかどうかはまだわからない。この

用途:

#ifdef UI_USER_INTERFACE_IDIOM 
    #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
#else 
    #define IS_IPAD false 
#endif 

#define WIDTH (IS_IPAD ? 768 : 320) 
#define HEIGHT (IS_IPAD ? 1024 : 480) 
+0

おかげで、それが動作します。 –

+1

素晴らしい=)! WIDTHを使う代わりに 'NSScreen mainScreen.bounds.width'(' bounds'は 'CGRect'です)を使うこともできます。これはもっと正確です( 'width'を' height'垂直サイズを得るために)。 – elslooo

0

#if文の中にランタイムチェックがあります。プリプロセッサのチェックでは(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)は評価されないため、実行時までiPadであるかどうかは分からないため、実行時に幅と高さを設定する必要があります。また、falseの代わりに0を使用することをお勧めします。

0

(。あなたはSOに質問をするとき、あなたはあなたがしようとしたものを教えてください、そして、何が起こった) とにかく、私はあなたがやりたいことができなくなると思いますコンパイル時にコンパイラは実行するデバイスを知りません。コードをコンパイルして、iPad、iPhone、iPodで実行することができます。将来、どのデバイスをどのデバイスで実行するかを知ることができますか?

2

これは私のアプローチです:あなたは

#define _IPAD ((__IPHONE_OS_VERSION_MAX_ALLOWED >= 30200) && (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)) 
#define GUI_TITLE_LABEL_WIDTH (_IPAD? 220*2 : 220) 
#define UI_FONT_SIZE    (_IPAD? 20 : 16) 

短いと簡単にヘッダファイルにこれを使用することができます:あなたの助けのためのD

関連する問題