3

RetinaDisplay モード (2 倍の倍率) でより適切にレンダリングされる OpenGL アプリケーションがあり、iPad が低解像度の画面 (通常の倍率) で iPhone アプリをエミュレートしていることに気付きました。

Retina ディスプレイのグラフィックスを活用するために、iPhone アプリを iPad で実行するときは倍率を 2 倍にしたいと考えています。しかし、iPad は本当によく iPhone を偽装しているようです (Retina ディスプレイさえあれば完璧です...)。

ダブルスケールを強制すると、非常にうまく機能します(少なくともシミュレーターでは、テストするiPadがありません)。

そのため、古い iPhone であると多くの人が言っているにもかかわらず、自分が iPad で実行されているかどうかを知る方法が必要です。

それとも私はそれをやろうとすべきではありませんか?

4

6 に答える 6

21

アプリが iPad のエミュレータ モードで実行されている iPhone アプリである場合、その userInterfaceIdiom は Phone ですが、モデル タイプは iPad になります。これは、次のコードで確認できます。

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone &&
    [[[UIDevice currentDevice] model] hasPrefix:@"iPad"]) {
    // This app is an iPhone app running on an iPad
}
于 2013-02-13T22:24:44.767 に答える
20

iPad 専用のカスタム コード (ほとんどの場合、カスタム UI 関連のメソッド) を作成する場合は、(Apple の指示に従って) iOS 3.2 以降に存在する UI_USER_INTERFACE_IDIOM() メソッドを使用できます。

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
    // The device is an iPad running iPhone 3.2 or later.
}
else
{
    // The device is an iPhone or iPod touch.

}

ここで詳細を読むことができますhttp://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/BuildTimeConfiguration/BuildTimeConfiguration.html

これはAppleが推奨する方法です

于 2010-12-16T23:39:02.873 に答える
1

ドキュメント、UIDevice を参照してください。

たとえば、次のようなものです: NSString *system = [[UIDevice currentDevice] systemName];

次に、iPad かどうかにかかわらず [system isEqualToString:@"iPad"] を使用します。

UIDevice は非常に優れたクラスであり、multiTaskingSupported、systemVersion なども含まれています。UIKit が大好きです ;)

于 2010-12-16T22:14:57.363 に答える
0

これは実際には、アプリがシミュレートされた環境で実行されているか、実際のデバイスで実行されているかのみを示し、プラットフォームが iPad であるか iPhone であるかには影響しません。

実際、コンパイル時に、コンパイル対象のプラットフォームのターゲットが示されるため、実行する前に、特定の処理を行うために必要なことを知り、実行します。

たとえば、開発用 (シミュレーターでの実行) と本番用の URL が異なるため、次のようなことを行います。

#if TARGET_IPHONE_SIMULATOR
#define URL @"http://192.x.x.x/request"
#else
#define URL @"http://example.com/request"
#endif
于 2011-01-06T17:05:20.743 に答える
0

私はそれだと思います:

// Set hello to "Hello, <device or simulator>"!

TARGET_IPHONE_SIMULATORの場合

NSString *hello = @"こんにちは、iOS シミュレーター!";

そうしないと

NSString *hello = @"こんにちは、iOS デバイス!";

終了

リンクアップルドキュメント

于 2010-12-16T22:16:13.337 に答える
-4

それがiPhoneアプリである場合、それがiPhone上で実行されていることがわかる限り、違いを見分けることはできないはずです。iPad をターゲットにする場合は、iPad ターゲット用にビルドする必要があります。

于 2010-12-16T22:15:21.723 に答える