使用条件来#define

时间:2013-08-26 04:44:23

标签: c++ ios objective-c constants c-preprocessor

我正在尝试定义一个常量HEIGHT_WINDOW,但我希望它取决于用户是在iPhone 4还是iPhone 5上运行。我已经有办法检查用户所在的iPhone。

有没有办法可以做类似的事情:

if (//is running on iPhone 4) {
    #define HEIGHT_WINDOW 300
} else {
    #define HEIGHT_WINDOW 400
}

如果有人有任何提示我会非常感激 - 再次我想根据用户是在iPhone 4还是iPhone 5上运行来定义#define。

4 个答案:

答案 0 :(得分:4)

你不能在编译时这样做,因为决定必须在运行时完成,所以尝试使用预处理器宏甚至没有意义。请改用普通变量:

double windowHeight = [UIScreen mainScreen].bounds.size.height > 500
                    ? 400
                    : 300;

答案 1 :(得分:1)

试试这个

CGSize result = [[UIScreen mainScreen] bounds].size;
        if (result.height==480)
        {
           NSLog(@"iPhone 4 or 4s");
        }
        if (result.height==568)
        {
             NSLog(@"iPhone 5");
        }

答案 2 :(得分:0)

最好使用变量代替常量。宏不会这样工作。

int HEIGHT_WINDOW;
if (//is running on iPhone 4) {
    HEIGHT_WINDOW = 300
} else {
    HEIGHT_WINDOW = 400
}

答案 3 :(得分:-1)

我在我的代码中做了很多次,这肯定有用。

#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

if(!IS_IPHONE_5)
{
    [self.view setFrame: CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y , self.view.frame.size.width, 300)];
}
else
{
    [self.view setFrame: CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y , self.view.frame.size.width, 400)];
}