#define на основе платформы [iPhone или iPad] - PullRequest
8 голосов
/ 21 мая 2011

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

#if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define imgAmcWidth 656.0f
#define imgAmcHeight 36.0f
#else
#define imgAmcWidth    240.0f
#define imgAmcHeight   20.0f
#endif

Кажется, это удовлетворяет мои потребности. К сожалению, xcode 4 не может скомпилировать это, что выдает ошибку: «Токен« [»недопустим в препроцессоре ..» [LLVM GCC 4.2]. Что я делаю не так?

Ответы [ 2 ]

22 голосов
/ 23 мая 2011

Хотя это, вероятно, не самое элегантное решение, но для предотвращения серьезной переписывания кода я решил использовать следующий прием:

#define iPad    UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
#define imgAmcWidth         (iPad ? 639.0f : 240.0f)
// etc..
5 голосов
/ 21 мая 2011

UI_USER_INTERFACE_IDIOM и UIUserInterfaceIdiomPad не являются препроцессором.Они являются частью iOS, поэтому вы должны сделать:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    <define your constants here>
} else {
    <define your constants here>
}

См. Также this , если вы планируете поддерживать версии iOS, предшествующие 3.2

...