#define
является определение препроцессора. Это означает, что это первое, что сделано в компиляции. Он в основном просто вставляет определение везде в коде, прежде чем он начнет компиляцию.
Но поскольку ваши операторы if выполняются во время выполнения, а не времени компиляции, вам нужно либо изменить свои операторы if на препроцессор if (#if
, не рекомендуется), либо изменить ширину/высоту, определяемую во время выполнения (настоятельно рекомендуется). Это должно выглядеть так:
int width, height;
if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
width = X;
height = Y;
else {
width = A;
height = B;
}
и затем с этого времени просто используйте значения ширины и высоты для вашей ширины и высоты.
Если вы все еще хотите пометить X, Y, A, B, а не с помощью #define (компилировать постоянные времени), использование во время выполнения константы:
static const int iPhoneWidth = X;
static const int iPhoneHeight = Y;
static const int iPadWidth = A;
static const int iPadHeight = B;
if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
width = iPhoneWidth;
height = iPhoneHeight;
else {
width = iPadWidth;
height = iPadHeight;
}
Возможно, вы хотите использовать 'static const', а не '# define'. –