web-dev-qa-db-ja.com

Xcode 6デバイス固有のアセットカタログ

新しい6および6以上のデバイス用にアプリを更新しようとしています。

新しいiPhoneサイズ(6および6+)の起動画像を追加しました。 6と6+の両方のアセットカタログにエントリがあります。そこに問題はありません。

また、追加する必要のあるフルスクリーンビューオーバーレイ画像もいくつかあります。これらの画像は@ 2x(iPhone 4s)とR4(iPhone 5 5s 5c)にすでにあります。新しい解像度サイズで画像を作成しましたが、画像セットに追加する方法がわかりません。

アセットカタログに移動すると、イメージセットでデバイス固有を選択でき、iPhone、retina-4、iPadのエントリが表示されます。 1x、2x、Retina 4 2x、3x用のドラッグ/ドロップウェルがあります。

私の質問-iPhone 6の画像はどこに置くべきですか?明らかに3xは6プラスです。画面サイズが異なるため、retina-4がiPhone 5とiPhone 6の両方でどのように使用できるかわかりません。

何が欠けていますか?

31
Kurt Schwartz

これはXcode 6のバグであると確信しています。アセットカタログの画像セットから画像を読み込むと、ズームモードか標準表示モードかに関係なく、iPhone 6+の3xエントリが常に表示されます。 iPhone 6の場合、両方のモードで常に2xエントリを取得します。 iPhone 4sの場合、2xエントリも取得します。

これらのデバイスはすべて異なるスケーリングとアスペクト比を持っているため、ピクセル精度の画像には受け入れられません。私の画像はすべて全画面表示であり、オーバーレイを目的としているため、ズームモードで配置すると正しく表示されませんでした。

2つの画像セットを作成して、この問題を回避しました。
1)標準モードのiPhone 6/6plus
3xエントリの1242x2208画像
2xエントリの750x1334

2)ズームモードのiPhone 6/6PlusまたはiPhone 5
3xエントリの場合は1125x2001
2xエントリの場合は640x1136
R4-2xエントリの場合は640x1136

これを機能させるには、デバイスが新しいデバイスであるかどうか、およびデバイスがズームモードであるかどうかを判断する必要があります。この情報に基づいて、正しい画像セットから画像を読み込みます。

これは、デバイスがズーム/標準モードの新しいデバイスの1つであるかどうかを判断するために使用するコードです。

UIScreen *screen = [UIScreen mainScreen];
if (screen.scale == 3 && screen.currentMode.size.width == 1242 ||
    screen.scale == 2 && screen.currentMode.size.width == 750) {
    self.overlay = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"StdImageSet"]];
} else {
    self.overlay = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ZoomedImageSet"]];
}

これは醜いです。イメージセットはこの種のコードを排除することになっているので、私はこれを行う必要がありません。これを回避する方法はまだ見当たらず、レーダー(レーダー18463463)バグを報告しました。

6
Kurt Schwartz

これは本当に迷惑です。デバイス固有の設定については、LaunchImage Setのようなメニューがあり、画面サイズごとに異なるプレースホルダーが必要です。

5
trppr

私はこれが役に立ったと感じました: http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions

IPhone 6はリサンプリングされた@ 2x(iPhone 5)画像を使用するようです。また、画像セットのプロパティ(ユーティリティペイン)では、「ユニバーサル」(x1、x2、x3)と「デバイス固有」の画像ウェルを切り替えることができます。

5
Anthony Scott

ここに私がiPhoneデバイスに対して行った私の観察のいくつかを配置します(多分誰かがそれを役に立つと思うでしょう):

  1. iPhone 4S-2x Any/Anyタイル
  2. iPhone 5-2x 1GB/Anyタイル
  3. iPhone 5S-2x 1GB/Anyタイル
  4. iPhone 6-2x 1GB/Anyタイル
  5. iPhone 6 Plus-3x 1GB/Anyタイル

これを達成するために、デバイス-iPhone、メモリ1GBを確認しました。ご覧のとおり、iPhone 5/5S/6のグラフィックは区別されません。多分Metal 1v2/2v2の設定で遊んでいることは区別できるかもしれませんが、これはあまりにも夢中になっているように見えます。 知識参照は10:50から始まります

私が今WWDCから得たものは、解像度/デバイス/デバイスの向きの詳細ではなく、サイズクラス(6 Plusを除くiPhoneでも同じ)に焦点を当てる必要がありますが、何らかの理由でデバイス固有のグラフィックスが必要な場合アセットカタログ(すばらしい)を使用したい場合は、ここで私が現在入手できるもの(Xcode 7)を取得します。

5
Julian Król

この問題の新しい解決策を見つけました。 Retina 4画像を2xに使用し、フルスクリーン画像ビューのコンテンツモデルを設定してアスペクトフィルをスケーリングすると、iPhone 4sとiPhone 6の両方で機能します。

1
Peng90