Одна иконка приложения в Xcode 14
Мы ждали этого долгие годы, но только в Xcode 14 появилась возможность автоматически создавать полный набор иконок приложения из одной картинки 1024×1024. Xcode 14 также добавляет несколько дополнительных размеров значков.
Содержание
Одна иконка приложения
Начиная с Xcode 14, когда вы создаете новый iOS-проект, иконка приложения в каталоге ассетов по умолчанию имеет новый «Один размер» (Single Size). Вместо полного набора иконок разного размера, есть один слот для изображения размером 1024×1024 точек, из которого система сама генерирует нужные изображения по мере необходимости.
Теперь также можно дважды щелкнуть по слоту изображения, чтобы напрямую открыть панель файлов и выбрать файл изображения. Трудно поверить, что это было невозможно до сих пор.
Вот объявление в примечаниях к выпуску Xcode 14:
Упростите создание значков приложений с помощью одного изображения размером 1024×1024, размер которого автоматически изменяется в зависимости от цели. Выберите параметр «Один размер» (Single Size) в инспекторе атрибутов значка приложения в каталоге активов. Вы по-прежнему можете переопределять отдельные иконки с помощью параметра «Все размеры» (All Sizes).
Режим одного размера также существует для watchOS, но, к сожалению, не для macOS:
Переопределение иконок разных размеров
Режим иконок из одного размера отлично подходит для значков, которым не требуется корректировка уровня пикселизации при изменении размера. Он также отлично подходит для плейсхолдеров во время первоначальной разработки приложения. Если вам нужно быть более точным, вы можете переключиться на «Все размеры»:
Это возвращается к отображению полного набора размеров иконок приложения:
Вам не нужно заполнять все слоты, просто измените те, где вы хотите переопределить изображения, полученные из одной главной иконки.
Режим Xcode 13
Когда вы открываете проект в Xcode 14, созданный с помощью Xcode 13 или более ранней версии, в каталоге ассетов иконки отображаются режиме «Все размеры (Xcode 13)»:
Вы можете переключиться на режим единого значка приложения или перейти в режим «Все размеры» (All Sizes) в Xcode 14. Если вы выберете режим «Единый размер», каталог активов удалит все значки, кроме изображения 1024×1024.
Новые размеры значков приложений
Если вы обновите проект Xcode 13 или более ранней версии до режима Xcode 14 «Все размеры», вы заметите, что у вас есть несколько дополнительных слотов для новых размеров, добавленных в Xcode 14:
Четыре новых размера значков приложений:
- iOS 38pt 3x (114x114px)
- iOS 64pt 2x (128x128px)
- iOS 64pt 3x (192x192px)
- iOS 68pt 2x (136x136px)
Для чего эти новые размеры непонятно, но вам не нужно обязательно добавлять для них изображения. Если вы этого не сделаете, вы получите измененные версии из изображения 1024×1024.
Ограничения
В примечаниях к выпуску упоминается известная проблема с проверкой App Store, если вы ориентируетесь на более ранние версии, чем iOS 12 или watchOS 4:
Приложения, использующие иконку одного размера, могут не пройти проверку в App Store, если цель развертывания меньше iOS 12 или watchOS 4.
Я не проверял, существует ли проблема, но, возможно, стоит избегать иконки приложения одного размера, если вы все еще поддерживаете iOS 11 или более раннюю версию.
Если вы нашли опечатку — выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать [email protected].
растр vs вектор / Хабр
В каждом приложении есть иконки для кнопок, статусов, тулбаров, меню и многого другого. Конечно, в идеале, в команде должен быть выделенный человек, специализирующийся на иконках и знающий все ньюансы создания оных.
Но жизнь далека от идеала, и таких людей в командах обычно нет (честно говоря хороших «иконщиков» в принципе найти очень сложно).
Растр
Тут казалось бы все просто: вооружаемся любимым графическим редактором, рисуем что нам нужно на прозрачном фоне, сохраняем в PNG и спокойно используем картинку в своем приложении.
Но не тут-то было — вдруг выясняется, что наша картинка в разных местах должна показываться с разными размерами.
Каждый, кто когда-либо пытался разглядеть прыщики на лице любимой фотомодели, знает, что при увеличении маленькой картинки все становится «квадратным».
Немножко подумав мы восклицаем: «Эврика! Ведь можно, наоборот, уменьшать большую картинку.». И засучив рукава перерисовываем все наши иконки в наибольший размер (обычно 64х64).
Но и тут физика против нас. Дело в том, что производители мониторов (наверняка сговорившись) умеют делать только мониторы с фиксированным числом пикселей и пиксели эти тоже фиксированного размера.
Допустим, мы хотим уменьшить изображение 64х64 до размера 32х32. Это значит, что если взять квадрат 2 на 2 в исходном изображении, то при уменьшении он должен превратиться в один пиксель (очень грубо, но примерно так оно и работает).
При таком превращении неизбежна потеря информации. В итоге изображения либо «размывается», либо с него пропадают какие-то детали. Единственное изображение, которое уменьшаеться правильно это одноцветный квадрат 64х64.
Что же делать? Рисовать разные иконки под каждый размер. Без вариантов. Очень наглядный пример — запустите Notepad (Win7) и сравните иконку, отображаемую на панели задач и иконку в заголовке окна.
Итак, мы нарисовали иконки всех нужных размеров и казалось бы можем спать спокойно. А вот и нет. Есть еще два момента, о которых стоит помнить:
- Анимации. Например, при наведении мышкой картинка увеличивается в 1.5 раза.
- Мониторы с нестандартным DPI. Потихоньку (ну очень медлееееено, где мой монитор 24″ и 300DPI?) начинают оные появляться. В основном на мобильных устройствах и нетбуках.
Увы, хорошего решения ни для одной из вышеперечисленных проблем нет. Остается расслабиться и
оставить все как есть.
Вектор
Когда я впервые попробовал WPF был безумно рад возможности создавать иконки для кнопок в в Xaml’е. Казалось бы вот оно решение всех проблемм. Но не тут-то было (ох уж эта чертова физика).
во-первых, хоть картинка и векторная, но рисовать ее надо на растровом экране (растеризация). Поэтому для векторных иконок характерны те же самые проблеммы, что описаны выше.
В общем случае, придеться рисовать по иконке на каждый размер. Хотя часто удается добиться приемлемого качества при масштабировании выставлением SnapsToDevicePixels в true и упрощением самого изображения.
Во-вторых, в полный рост встает проблемма производительности. Если ваша картинка состоит из нескольких десятков элементов, то отрисовывать ее становиться гораздно дороже отрисовки растрового изображения аналогичного размера.