我需要一个宏来确定该设备是iPhone 4还是iPhone 5.我被告知有一个宏可以做到这一点。有谁知道它是什么或我在哪里可以找到它?
答案 0 :(得分:2)
我发现了一个可以解决问题的方法
#define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double) 568) < DBL_EPSILON)
答案 1 :(得分:2)
不幸的是,不仅没有宏,甚至没有公共API调用将设备类型返回到可以区分不同版本的iPhone(例如iPhone 4和iPhone5)之类的程度。 / p>
您可以使用UI_USER_INTERFACE_IDIOM宏来确定用户是在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.
}
取自Advanced App Tricks的iOS App Programming Guide部分。
关于支持多种屏幕尺寸以及特别是iPhone 4和iPhone 5,iOS应用程序编程指南指出:
要正确支持代码中较大的屏幕,请不要对当前设备的屏幕大小进行假设。相反,始终动态检索屏幕,窗口或视图的大小,并使用该大小信息来配置您的界面。您还应该使用基于视图的约束来构建用户界面,这样可以更轻松地在运行时管理视图层次结构的更改。
如果不是您要检测的屏幕尺寸,而是用户正在运行的iOS版本,Apple建议检查特定功能并使用后备(如果不可用)。再次,取自iOS应用程序编程指南:
要确定某个方法是否在现有类上可用,请使用instancesRespondToSelector:class方法或respondsToSelector:instance方法。
链接iOS SDK 4.2及更高版本的应用可以使用该版SDK中引入的弱链接支持。此支持允许您检查是否存在给定的Class对象,以确定是否可以使用该类。
链接iOS SDK 4.1及更早版本的应用必须使用NSClassFromString函数来查看是否已定义类。如果函数返回的值不是nil,则可以使用该类。
要确定基于C的函数是否可用,请执行函数名称与NULL的布尔比较。如果符号不是NULL,则可以使用该函数。
最后,yasirmturk提供了一系列便利宏here,用于检查用户正在运行的iOS版本。
答案 2 :(得分:1)
这就是我的所作所为:
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
}
}
答案 3 :(得分:0)
我在UIDevice上创建了一个类别来实现它。非常简单的实现,但代码是
.h
#import <UIKit/UIKit.h>
@interface UIDevice (Recognition)
- (BOOL)isDeviceiPhone5;
@end
.m #import“UIDevice + Recognition.h”
@implementation UIDevice (Recognition)
- (BOOL)isDeviceiPhone5
{
return ([UIScreen mainScreen].bounds.size.height == 568.0f);
}
@end
然后,您可以从任何地方[[UIDevice currentDevice] isDeviceiPhone5]