Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 检查设备的Objective-C宏_Ios_Objective C_Macros_C Preprocessor - Fatal编程技术网

Ios 检查设备的Objective-C宏

Ios 检查设备的Objective-C宏,ios,objective-c,macros,c-preprocessor,Ios,Objective C,Macros,C Preprocessor,我需要一个宏来确定设备是iPhone4还是iPhone5。我被告知有一个宏可以做到这一点。有人知道它是什么或者我在哪里能找到它吗 我找到了一个能起作用的 #define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double) 568) < DBL_EPSILON) #定义为"IPHONE"5(晶圆((双)[[UIScreen mainScreen]边界].size.height-(双)

我需要一个宏来确定设备是iPhone4还是iPhone5。我被告知有一个宏可以做到这一点。有人知道它是什么或者我在哪里能找到它吗

我找到了一个能起作用的

#define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double) 568) < DBL_EPSILON)
#定义为"IPHONE"5(晶圆((双)[[UIScreen mainScreen]边界].size.height-(双)568)
我找到了一个能做到这一点的

#define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double) 568) < DBL_EPSILON)
#定义为"IPHONE"5(晶圆((双)[[UIScreen mainScreen]边界].size.height-(双)568)
我就是这么做的:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    // iPad
} else {
    if (CGRectGetHeight([UIScreen mainScreen].bounds) >= 568.0) {
        // 4 inch - iPhone 5 or the new iPod touch
    }
    else {
        // 3,5 inch - iPhone 4S and older
    }
}
我就是这么做的:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    // iPad
} else {
    if (CGRectGetHeight([UIScreen mainScreen].bounds) >= 568.0) {
        // 4 inch - iPhone 5 or the new iPod touch
    }
    else {
        // 3,5 inch - iPhone 4S and older
    }
}

不幸的是,不仅没有宏,甚至没有公共API调用来返回设备类型,使其能够区分不同版本的iPhone(如iPhone 4和iPhone 5)

设备检测 您可以使用宏确定用户是在iPhone/iPod上运行还是在iPad上运行:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
     // The device is an iPad running iOS 3.2 or later.
}
else {
     // The device is an iPhone or iPod touch.
}
摘自本手册的“部分”

屏幕尺寸检测 关于支持多种屏幕尺寸以及iPhone 4和iPhone 5的通用性,尤其是iOS应用程序编程指南指出:

要正确支持代码中的大屏幕,请不要假设当前设备的屏幕大小。相反,始终动态检索屏幕、窗口或视图的大小,并使用该大小信息来配置界面。您还应该使用基于视图的约束构建用户界面,这使得在运行时更容易管理对视图层次结构的更改

iOS版本检测 如果不是您想要检测的屏幕大小,而是用户正在运行的iOS版本,苹果建议检查特定功能,如果不可用,则使用回退。同样,摘自iOS应用程序编程指南:

  • 要确定某个方法在现有类上是否可用,请使用InstanceRespondToSelector:class方法或RespondToSelector:instance方法

  • 与iOS SDK 4.2及更高版本链接的应用程序可以使用该版本SDK中引入的弱链接支持。此支持允许您检查给定类对象是否存在,以确定是否可以使用该类

  • 链接iOS SDK 4.1及更早版本的应用程序必须使用NSClassFromString函数查看是否定义了类。如果函数返回的值不是nil,则可以使用该类

  • 要确定基于C的函数是否可用,请将函数名与NULL进行布尔比较。如果符号不为NULL,则可以使用该函数


最后,yasirmturk提供了一系列方便的宏来检查用户正在运行的iOS版本。

不幸的是,不仅没有宏,甚至没有公共API调用可以将设备类型返回到可以区分不同版本iPhone(如iPhone 4和iPhone 5)的程度

设备检测 您可以使用宏确定用户是在iPhone/iPod上运行还是在iPad上运行:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
     // The device is an iPad running iOS 3.2 or later.
}
else {
     // The device is an iPhone or iPod touch.
}
摘自本手册的“部分”

屏幕尺寸检测 关于支持多种屏幕尺寸以及iPhone 4和iPhone 5的通用性,尤其是iOS应用程序编程指南指出:

要正确支持代码中的大屏幕,请不要假设当前设备的屏幕大小。相反,始终动态检索屏幕、窗口或视图的大小,并使用该大小信息来配置界面。您还应该使用基于视图的约束构建用户界面,这使得在运行时更容易管理对视图层次结构的更改

iOS版本检测 如果不是您想要检测的屏幕大小,而是用户正在运行的iOS版本,苹果建议检查特定功能,如果不可用,则使用回退。同样,摘自iOS应用程序编程指南:

  • 要确定某个方法在现有类上是否可用,请使用InstanceRespondToSelector:class方法或RespondToSelector:instance方法

  • 与iOS SDK 4.2及更高版本链接的应用程序可以使用该版本SDK中引入的弱链接支持。此支持允许您检查给定类对象是否存在,以确定是否可以使用该类

  • 链接iOS SDK 4.1及更早版本的应用程序必须使用NSClassFromString函数查看是否定义了类。如果函数返回的值不是nil,则可以使用该类

  • 要确定基于C的函数是否可用,请将函数名与NULL进行布尔比较。如果符号不为NULL,则可以使用该函数


最后,yasirmturk提供了一系列方便的宏来检查用户正在运行的iOS版本。

我在UIDevice上做了一个分类来实现这一点。相当简单的实现,但代码是

h

#import <UIKit/UIKit.h>

@interface UIDevice (Recognition)

- (BOOL)isDeviceiPhone5;

@end

然后从任何地方您都可以执行
[[UIDevice currentDevice]isDevicePhone5]

我在UIDevice上创建了一个类别来实现这一点。相当简单的实现,但代码是

h

#import <UIKit/UIKit.h>

@interface UIDevice (Recognition)

- (BOOL)isDeviceiPhone5;

@end

然后,您可以在任何地方执行
[[UIDevice currentDevice]IsDevicePhone5]

您不能使用宏,您需要在运行时进行检查。您需要在运行时进行检查。您也可以调用
[UIScreen mainScreen]。缩放
以确定设备是否为视网膜显示器,提供更多的设备类型。@c.cam108是的,但对于iPhone4/4S、iPhone5和iPad都是如此。“我的代码”用于区分它们。您也可以调用
[UIScreen mainScreen]。缩放
以确定设备是否为视网膜显示器,从而提供更多数据