デバイスが iPhone 4 か iPhone 5 かを判別するマクロが必要です。これを実行できるマクロがあるとのことでした。それが何であるか、またはどこで見つけることができるか知っている人はいますか?
4 に答える
残念ながら、マクロがないだけでなく、iPhoneのさまざまなバージョン(iPhone 4とiPhone5など)を区別できる程度にデバイスタイプを返すパブリックAPI呼び出しもありません。
デバイスの検出
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アプリプログラミングガイド』の「高度なアプリの秘訣」セクションから引用。
画面サイズの検出
複数の画面サイズとiPhone4およびiPhone5のサポートに関連して、特にiOSアプリプログラミングガイドには次のように記載されています。
コードでより大きな画面を適切にサポートするために、現在のデバイスの画面サイズについて想定しないでください。代わりに、常に画面、ウィンドウ、またはビューのサイズを動的に取得し、そのサイズ情報を使用してインターフェイスを構成します。また、ビューベースの制約を使用してユーザーインターフェイスを構築する必要があります。これにより、実行時にビュー階層への変更を管理しやすくなります。
iOSバージョンの検出
検出しようとしている画面サイズではなく、ユーザーが実行しているiOSのバージョンである場合、Appleは特定の機能を確認し、利用できない場合はフォールバックを使用することをお勧めします。繰り返しになりますが、iOSアプリプログラミングガイドから抜粋しました。
メソッドが既存のクラスで使用可能かどうかを判断するには、instancesRespondToSelector:クラスメソッドまたはrespondsToSelector:インスタンスメソッドを使用します。
iOS SDK 4.2以降に対してリンクするアプリは、そのバージョンのSDKで導入されたウィークリンクサポートを使用できます。このサポートにより、特定のClassオブジェクトの存在を確認して、そのクラスを使用できるかどうかを判断できます。
iOS SDK 4.1以前にリンクするアプリは、NSClassFromString関数を使用して、クラスが定義されているかどうかを確認する必要があります。関数がnil以外の値を返す場合は、クラスを使用できます。
Cベースの関数が使用可能かどうかを判断するには、関数名とNULLのブール比較を実行します。シンボルがNULLでない場合は、関数を使用できます。
最後に、yasirmturkは、ユーザーが実行しているiOSのバージョンをチェックするための一連の便利なマクロをここに提供します。
トリックを行うものを見つけました
#define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double) 568) < DBL_EPSILON)
これが私がすることです:
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
}
}
これを実装するために 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]