19

Mac OS X 10.7 以降で動作する Cocoa アプリケーションの場合:

Retina ディスプレイが少なくとも 1 つ接続された Mac でアプリが現在実行されているかどうかを、実行時に確認する最善の方法は何ですか?

この種のことをチェックすることが本当に間違っているのであれば、その理由についての十分に合理的な説明を歓迎します (そして、そのような回答が良ければ賛成票を投じます)。

しかし、私はまだ知りたいです:)。

新しい Mac Book Pro の「Retina」ハードウェア (現在 Retina ディスプレイを備えている唯一の Mac) に特化したチェックを行うことができるようですが、より一般的/汎用的/将来性のある方法でチェックしたいと思います。これより。

理想的には、現在 Retina ディスプレイを搭載している特定の Mac モデルではなく、Retina ディスプレイを検出する方法を知りたいです。

4

3 に答える 3

33

本当にこれを行う必要がある場合は、 を参照してください-[NSScreen backingScaleFactor]。しかし、少なくとも知りたい理由について詳しく知らなければ、これは間違っているように思えます。

現在、Retina ディスプレイを搭載した Mac は 1 つしかありませんが、最終的には Retina をサポートする (実行時に着脱できる) スタンドアロン ディスプレイが登場する可能性があり、内蔵の Retina ディスプレイを 1x モードで構成できる可能性があります。したがって、「Retina ディスプレイが取り付けられているか」という質問に対する答えは、いつでも変わる可能性があります。

-convert*ToBacking:むしろ、メソッド またはを使用して、特定のスケールでコンテンツを描画する必要があるかどうかを知りたい場合があります-[NSWindow backingScaleFactor]。詳細については、WWDC 2012 のセッション ビデオ「OS X での高解像度の高度なヒントとコツ」をご覧ください (投稿されたら、できれば数週間以内に公開されることを願っています)。

于 2012-06-16T21:25:22.277 に答える
9

高解像度の画面があるかどうかを検出する必要があるインスタンスに遭遇しましたが、これは機能しました

float displayScale = 1;
    if ([[NSScreen mainScreen] respondsToSelector:@selector(backingScaleFactor)]) {
        NSArray *screens = [NSScreen screens];
        NSUInteger screenCount = screens.count
        for (int i = 0; i < screenCount; i++) {
            float s = [screens[i] backingScaleFactor];
            if (s > displayScale)
                displayScale = s;
        }
    }
于 2012-10-31T20:43:23.007 に答える
5

さて、iOS ではUIScreen.scaleプロパティを使用します。が返された場合2.0は、高解像度ディスプレイを搭載したデバイスを使用しています。それ以外の場合は、低解像度のデバイスを使用しています。

-[NSScreen backingScaleFactor]したがって、Mac OSではまたはのいずれかを使用できると思います-[NSWindow backingScaleFactor]

于 2012-06-16T21:21:16.277 に答える