Разрешения 1x, 2x и 3x. В большинстве случаев вы должны масштабировать размеры изображений таким образом, чтобы, например, 1x было 100x100
, 2x было 200x200
и 3x было 300x300
.
Это не имеет ничего общего с разрешением, а скорее со шкалой DPI. Это значение, которое вы получаете от UIScreen.main.scale
. Это шкала между вашей системой координат и системой координат пикселя осыпи. Например, если вы возьмете 2x устройство с разрешением 750x1334
и распечатаете кадр, вы получите 375x667
, отметив UIApplication.shared.keyWindow!.frame
.
Это означает, что если вы разместите изображение с размером кадра 100x100
на устройстве 2x, оно займет 200x200
пикселей. Для 3x потребуется 300x300
пикселей. Вот почему изображения в 2 и 3 раза должны быть больше.
Проблема возникает, если вы хотите масштабировать изображение напрямую в зависимости от размера экрана. Предположим следующее:
let imageWidth: CGFloat = 44.0/375.0*view.frame.size.width
Если это используется для размера изображения, тогда ваше изображение будет пропорционально изменено в зависимости от размера вашего экрана. И для этого вам понадобится лучшая система для иконок, чем иметь 3 версии. Вы можете поместить их в активы и иметь 3 изображения на разрешение экрана.
Но в большинстве случаев лучше сохранить размер изображения и увеличить пропуски вокруг него. Итак, предположим, что экран с шириной 375 будет иметь изображение шириной 100 в середине. Было бы 137,5 пробелов с каждой стороны. Теперь просмотр одной и той же сцены на устройстве шириной 414 даст 157 пробелов на каждой из сторон. Обычно это приемлемо.
Если вам действительно нужно масштабировать изображения, вам также следует рассмотреть масштабирование шрифтов. Если один из ваших значков увеличивается в размере на 10%, то, скорее всего, текст рядом с ним должен иметь увеличенный размер шрифта на 10%. Позже это может значительно усложнить ситуацию из-за округления размеров шрифта до целочисленного значения. Поэтому я предлагаю вам избежать этого.