2010-12-27 3 views
1

Я создаю универсальное приложение, которое работает oniphone и ipad. Я использую #define для создания CGRect. И я хочу использовать два разных #define - один для iPhone и один для iPad. Как я могу объявить их так, что правильный будет выбран универсальным приложением ..........iPhone - Как использовать #define в универсальном приложении

Я думаю, что мне нужно обновить немного больше описания, чтобы избежать путаницы. У меня есть 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 Как я могу продолжить?

ответ

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

В случае, если вы хотите использовать условную компиляцию, чтобы определить, какой из двух #define заявления должны быть включены в вашем коде, вы не можете: а универсальное приложение не содержит двух отдельных бинарных файлов для iPhone и iPad. Это всего лишь один двоичный код, поэтому все решения, связанные с платформой, должны выполняться во время выполнения.

+0

Спасибо за информацию. Вы упомянули CGRectMake только для одного прямоугольника. См. Мое обновленное описание. – Satyam

+0

Ну, вы, очевидно, повторите этот процесс три раза. BTW, я бы не работал с '# define'. Почему бы просто не объявить переменную и не определить ее в соответствии с платформой, на которой вы работаете. –

+0

Еще раз спасибо. Можете ли вы рассказать мне, как объявлять переменную на платформе, на которой я запущен? – Satyam

1

Я использовал эту функцию для обнаружения iPad, а затем написал условия для всех разных частей приложения.

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

Также вы можете загрузить различные xib-файлы для iPhone/iPad.

+0

#ifdef UI_USER_INTERFACE_IDIOM разбит на Xcode 6.3+, поскольку он больше не является препроцессором – k3a