6

私は iPad 2 を持っていないので、[[UIDevice currentDevice] モデル] を呼び出すときに何を返すかを知る必要があります。「iPad」だけが返されると思ったのですが、間違っているようです。

誰か教えてくれませんか?

ありがとう

4

11 に答える 11

27

カメラ付きの iPad を確認します。

BOOL isIPad2 = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad &&
                [UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]);

一般に、モデル/バージョンの検出に基づいて包括的な仮定を行うよりも、特定の機能を検出する方が適切であることに注意してください。たとえば、カメラが必要な場合は、カメラを明示的にテストします。利用可能な RAM の量に基づいて UI の品質を微調整する必要がある場合は、物理 RAM をテストします。モデル検出を使用することの危険性を強調する、私が書いたコメントにも注意してください。

于 2011-04-26T01:25:02.770 に答える
13

modelプロパティは、情報提供または診断出力のために表示する以外の目的で使用しないでください。保存が保証されているわけではありません。これに依存すると、新しいデバイスが来るたびに不必要に切断されます。

多くの iPhone アプリは、プロパティを確認しただけで iPad の互換モードで使用できず、modeliPhone/iPod でなければ何もしませんでした。

于 2011-03-17T10:50:36.413 に答える
9

「iPad2,2」などの正確なモデル文字列を取得するには、次のようなものを使用できます。

#import "YourDeviceDetectionClass.h"
#include <sys/utsname.h>

@implementation YourDeviceDetectionClass

+(NSString*)modelAsString
{
    struct utsname platform;
    int rc = uname(&platform);
    if(rc == -1)
    {
        // Error...
        return nil;
    }
    else
    {
        // Convert C-string to NSString
        return [NSString stringWithCString:platform.machine encoding:NSUTF8StringEncoding];
    }
}

@end
于 2011-12-04T11:06:50.620 に答える
7

UIScreen+Retina.h #インポート

@interface UIScreen(Retina)

// Returns YES if this is a Retina display.
- (BOOL)isRetina;


@end

UIScreen+Retina.m

#import "UIScreen+Retina.h"

@implementation UIScreen(Retina)

- (BOOL)isRetina {
    return [self respondsToSelector:@selector(displayLinkWithTarget:selector:)] && (self.scale == 2.0);
}

@end

利用方法

#import "UIScreen+Retina.h"

//http://stackoverflow.com/questions/3294100/how-to-differentiate-between-iphone4-and-iphone-3

if ([[UIScreen mainScreen] isRetina]) {
    // Retina display
}

iPad/iPhone ハイレゾ/ローレゾ

#import "UIScreen+Retina.h"
if([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad){
    //IPAD        
    if ([[UIScreen mainScreen] isRetina]) {
        // IPAD 3 - Retina display
        bannersGetPromoServerRequest.size = kXML_API_IMAGESIZE_IPAD_HIGHRES;            
    }else{
        //iPAD 1/2
        bannersGetPromoServerRequest.size = kXML_API_IMAGESIZE_IPAD_LOWRES;        }
}else{
    //IPHONE
    if ([[UIScreen mainScreen] isRetina]) {
        // IPHONE 4/4s/5 - Retina display
        bannersGetPromoServerRequest.size = kXML_API_IMAGESIZE_IPHONE_HIGHRES;

    }else{
        //IPHONE (3.x)
        bannersGetPromoServerRequest.size = kXML_API_IMAGESIZE_IPHONE_LOWRES;

    }
}
于 2012-03-08T11:04:14.153 に答える
4

スケールをテストできると思います

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
    if ([[[UIScreen mainScreen] scale] == 2.0) {
        // retina display
    } 
}
于 2012-03-08T05:23:53.870 に答える
2

OpenGL を使用している場合は、GPU モデルを確認できます。iPad 1 には PowerVR SGX 535 があり、iPad 2 には PowerVR SGX 543 があります。

const char * deviceStr = (const char *)glGetString(GL_RENDERER);
if (!strcmp(deviceStr, "PowerVR SGX 535")) {
    // iPad 1
}
else {
    // iPad 2 or later
}
于 2011-12-16T23:58:56.933 に答える
1

UIDevice Class Referenceが役に立ちます。より具体的な解決策については、この SO questionを試してください。

2 番目の質問については、解像度をテストする最善の方法は、iPad3,1 の PPI の数と同様のディスプレイを取得することです。残念ながら、おそらくできないでしょう。アプリをテストする最善の方法は、実際のデバイスで行うことです。

于 2012-03-08T05:22:38.597 に答える
0

次のWebサイトから、すべてのIPad2リターンモデルまたは必要なiOSデバイスのモデルを入手できます。IOS デバイスのモデルとプラットフォーム

また、次のコードを使用してモデルを直接取得できます。

- (NSString *)deviceModel
{
    struct utsname systemInfo;
    uname(&systemInfo);
    return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
}

- (NSString *) platformString
{
    NSString *platform = [self deviceModel];
    if ([platform isEqualToString:@"iPhone1,1"])    return @"iPhone_2G";
    else if ([platform isEqualToString:@"iPhone1,2"])    return @"iPhone_3G";
    else if ([platform isEqualToString:@"iPhone2,1"])    return @"iPhone_3GS";
    else if ([platform isEqualToString:@"iPhone3,1"])    return @"iPhone_4";
    else if ([platform isEqualToString:@"iPhone3,3"])    return @"Verizon_iPhone_4";
    else if ([platform isEqualToString:@"iPhone4,1"])    return @"iPhone_4S";
    else if ([platform isEqualToString:@"iPhone5,1"])    return @"iPhone_5";
    else if ([platform isEqualToString:@"iPhone5,2"])    return @"iPhone_5";
    else if ([platform isEqualToString:@"iPod1,1"])      return @"iPod_Touch 1G";
    else if ([platform isEqualToString:@"iPod2,1"])      return @"iPod_Touch 2G";
    else if ([platform isEqualToString:@"iPod3,1"])      return @"iPod_Touch 3G";
    else if ([platform isEqualToString:@"iPod4,1"])      return @"iPod_Touch 4G";
    else if ([platform isEqualToString:@"iPad1,1"])           return @"iPad_1G";
    else if ([platform isEqualToString:@"iPad2,1"])      return @"iPad_2(WiFi)";
    else if ([platform isEqualToString:@"iPad2,2"])      return @"iPad_2(GSM)";
    else if ([platform isEqualToString:@"iPad2,3"])      return @"iPad_2(CDMA)";
    else if ([platform isEqualToString:@"iPad3,1"])      return @"iPad_3";
    else if ([platform isEqualToString:@"iPad3,2"])      return @"iPad_3(GSM/CDMA)";
    else if ([platform isEqualToString:@"iPad3,3"])      return @"iPad_3(GSM)";
    else if ([platform isEqualToString:@"iPad3,4"])      return @"iPad_3(GSM)";
    else if ([platform isEqualToString:@"iPad2,5"])      return @"iPad_mini_1G";
    else if ([platform isEqualToString:@"i386"])         return @"Simulator";
    else if ([platform isEqualToString:@"x86_64"])       return @"Simulator";
    return platform;
}
于 2012-11-09T13:13:20.963 に答える
0

ここでは、これを行うべきではない理由について意見を述べ、代替コードを提供している多くの回答を得ていますが、質問に対する実際の回答は得られていません。実行しているデバイスを正確に特定したい場合(目的が何であれ... 他の開発者にあなたが達成しようとしていることを知られたふりをさせないでください)、UIDeviceHardwareサードパーティ クラスを使用できます。ここで見つけることができます:

https://github.com/fahrulazmi/UIDeviceHardware

次のように呼び出すだけです。

NSString *platformString = [UIDeviceHardware platformString];

そして、それはデバイスを返します。あなたの場合、platformStringこれらのいずれかと一致するように見えます:

@"iPad 2 (WiFi)"
@"iPad 2 (GSM)"
@"iPad 2 (CDMA)"
于 2016-11-24T18:00:04.960 に答える