2012-03-13 8 views

答えて

19
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && [[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [UIScreen mainScreen].scale > 1) 
{ 
    // new iPad 
} 
+8

技術的には間違いなく、将来のすべてのiPadsについても真実を返す可能性が高いでしょう。 –

+0

これは質問に答える(網膜ディスプレイを検出する)。しかし、実際にデバイスのバージョンを知る必要がある場合は、_all_デバイスを識別する答えについては、[here](http://stackoverflow.com/questions/9638970/ios-the-new-ipad-uidevicehardware-hw-machine-codename)を参照してください。 。 – bobobobo

+0

これはiOS 7とiOS 8の両方で動作します。ありがとうございます! – imcc

5

他のポスターが回答したように、モデルではなく機能を確認する必要があります。ただし、特定のモデルを特定することが必要な場合は、hw.machine sysctrlを次のように使用できます。モデルを特定できない場合は、コードが新しいモデルで実行されている可能性が高いため、その場合は何か分かりやすいものを実行する必要があります。

#include <sys/types.h> 
#include <sys/sysctl.h> 

// Determine the machine name, e.g. "iPhone1,1". 
size_t size; 
sysctlbyname("hw.machine", NULL, &size, NULL, 0); // Get size of data to be returned. 
char *name = malloc(size); 
sysctlbyname("hw.machine", name, &size, NULL, 0); 

NSString *machine = [NSString stringWithCString:name encoding:NSASCIIStringEncoding]; 
free(name); 

ここで、「機械」と既知の値を比較できます。たとえば、iPadを検出する(2012年3月)モデル:

if ([machine hasPrefix:@"iPad3,"]) NSLog(@"iPad (March 2012) detected"); 
+0

私はすでにiPad(Retina)エミュレータで私のアプリをテストしていました。私は新しいiPadの新しい解決のために問題があると思ったが、私は全く間違っていた。とにかくおかげさまで、これは他の人には役に立ちます。 – Freedom

関連する問題