0

我需要一个宏来确定设备是 iPhone 4 还是 iPhone 5。有人告诉我有一个宏可以做到这一点。有谁知道它是什么或我在哪里可以找到它?

4

4 回答 4

2

我找到了一个可以解决问题的

#define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double) 568) < DBL_EPSILON)
于 2013-03-13T17:15:26.147 回答
2

不幸的是,不仅没有宏,甚至没有返回设备类型的公共 API 调用,它可以区分不同版本的 iPhone(例如 iPhone 4 和 iPhone5)。

设备检测

您可以使用 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.
}

摘自iOS App Programming Guide的“ Advanced App Tricks ”部分。

屏幕尺寸检测

关于普遍支持多种屏幕尺寸和 iPhone 4 和 iPhone 5,iOS App Programming Guide 指出:

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

iOS版本检测

如果不是您想要检测的屏幕尺寸,而是用户正在运行的 iOS 版本,Apple 建议检查特定功能并在不可用时使用回退。同样,取自 iOS App Programming Guide:

  • 要确定现有类上的方法是否可用,请使用 instancesRespondToSelector: 类方法或 respondsToSelector: 实例方法。

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

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

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

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

于 2013-03-13T17:20:57.553 回答
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
    }
}
于 2013-03-13T17:16:25.770 回答
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]

于 2013-03-13T17:31:30.907 回答