Ios 检查设备的Objective-C宏
我需要一个宏来确定设备是iPhone4还是iPhone5。我被告知有一个宏可以做到这一点。有人知道它是什么或者我在哪里能找到它吗 我找到了一个能起作用的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-(双)
#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]。缩放以确定设备是否为视网膜显示器,从而提供更多数据