3

iOS アプリに表示したい画像があります。メモリを節約するために、デバイスの物理ピクセル数と一致する可能な限り低い解像度で表示したいと考えています。

たとえば、デバイスの高さの 1/4 の正方形として表示できます。したがって、サイズは次のようになります

iPhone 4s         240x240 ピクセル

iPhone 5/5s     284x284 ピクセル

iPhone 6          334x334 ピクセル

iPhone 6+        480x480 ピクセル

アセット カタログを調べましたが、iPhone 4s、iPhone 5/5s、および iPhone 6 (これらは@2x. 唯一の違いは iPhone 6+ ( @3x) です。

オプションを追加してみましたRetina 4 2xが、iPhone 5/5s のアイコンが異なるだけで、4s と 6 を区別する方法はまだありません。

ここに画像の説明を入力

デバイスに基づいてプログラムで画像を選択できることは理解していますが、アセット カタログは必要な画像のみをユーザーのデバイスにダウンロードします (これが正しいかどうかはわかりませんが、それについて何か読んだことは覚えています)。保管所。使用する画像が 1 つだけの場合、4 つの画像を含めるのは効率的ではありません。

物理ピクセル数が異なる iOS デバイスごとに異なる画像解像度を使用する方法はありますか?

画像のスケーリングについてではなく、正しい解像度 (デバイスごとに異なる画像) を使用することについて尋ねていることに注意してください。したがって、表示時に使用される RAM は少なくなります。

4

2 に答える 2

2

私はデバイスごとに異なるファイルを作成し、それらimageName@sizeに.128x128dog@128

これが私がこれを行うために使用したコードです

func getPNGImageForSize(size: Float, named: String) -> UIImage?{
    //the image size will be measured in points, which is the unit that is used
    //when setting the frames of UIViews. To turn this into pixels, it must be
    //multiplied by the screen's render scale (on an iPhone 6+, 1 point is equal
    //to 3 pixels, or 9 pixels in 2 dimensions (3^2).
    let scaled: Int = Int(ceil(size * Float(UIScreen.mainScreen().scale))
    let imageName: String = "\(named)@\(scaled)"

    //ofType set to png, because this image is a PNG
    let path = NSBundle.mainBundle().pathForResource(imageName, ofType: "png")

    return UIImage(contentsOfFile: (path ?? ""))
}

そしてそれを呼び出すために、私は単に使用します

getPNGImageForSize(Float(self.view.frame.height / 4), named: "dog")

デバイスに応じて、次の画像になります

iPhone 4s           犬@240.png

iPhone 5/5s        犬@284.png

iPhone 6             犬@334.png

iPhone 6+           犬@480.png

これは、名前が付けられた非正方形の画像で動作するように変更することもできますimageName@width-height

func getPNGImageForSize(width: Float, height: Float, named: String) -> UIImage?{  
    let scaledWidth: Int = Int(ceil(width * Float(UIScreen.mainScreen().scale))
    let scaledHeight: Int = Int(ceil(height * Float(UIScreen.mainScreen().scale))
    let imageName: String = "\(named)@\(width)-\(height)"

    let path = NSBundle.mainBundle().pathForResource(imageName, ofType: "png")

    return UIImage(contentsOfFile: (path ?? ""))
}
于 2015-09-14T05:15:32.000 に答える
1

@3x 画像を消費する iPhone6+ でどのように見えるかについて画像を設定する必要があります。次に、iPhone4S で iPhone6 デバイスに消費される @2x 画像サイズに縮小し、さらに @1x に画像を拡大します。以前のバージョンの iPad デバイスが使用するもの。

と の 3 つのスケールで 3 つの異なるイメージを作成し@1x @2xます@3x

3 つのみ、古い iPhone - 3S、4、非 Retina iPad はすべて @1x 画像を消費しますが、iPad Air、iPad retina、iPhone 4S - iPhone 6 は @2x を使用し、iPhone 6+ は @3x を使用します。ここにリンクがあります

これは、IOS デバイスでの画像のスケーリングに関する別の優れたブログです (それらすべて)。

編集

また、iPhone5 および 6 が @2x 画像を使用する理由についての疑問を解消することについて。iPhone5 は iPhone6 と同じ画像、つまり @2x 画像を使用しますが、iPhone5 は @2x を独自の制限まで縮小するため、高さにもかかわらず、これについて心配する必要はありません。Xcode はこれを非常に効率的に処理します。

于 2015-09-10T05:45:27.590 に答える