#define на основе платформы [iPhone или iPad]

Я пытаюсь сделать приложение для 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 ответа

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

#define iPad    UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
#define imgAmcWidth         (iPad ? 639.0f : 240.0f)
// etc..

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

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

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

Другие вопросы по тегам