Высокое разрешение: особенности и преимущества
Двумя определяющими характеристиками высокого разрешения для OS X являются высокая плотность пикселей и виртуальный экран. В OS X, в четыре раза больше пикселей для заданной области на дисплее с высоким разрешением. Увеличение плотности пикселей означает, что изображение является более точным, результатом чего является более четкий текст, чрезвычайно подробные фотографии и более четкий пользовательский интерфейс.
Виртуальный экран отделяет физические Пиксели, отображаемые устройством от пространства вашего приложения отрисовывающего их, так что вам не нужно беспокоиться о характеристиках дисплеев, на которых ваше приложение работает. Системные библиотеки оптимизированы и обновляться для выполнения работ, необходимых для отображения пользовательского пространства в пространство устройства. Большую часть времени, вашему приложению вообще не нужно быть в курсе отрисовывает-ли оно на стандартном или высоком разрешении дисплее, или же пользователь перетаскивает окна с одного разрешения экрана на другой.
Высокое разрешение реализованное OS X привносит с собой несколько особенностей и преимуществ. Понимание этого поможет вам оптимизировать, ваше приложение.
Точки не соответствуют пикселям
OS X ссылается на размер экрана, в точках, а не пикселях. Точка,- одна единица в пространстве пользователя, до любых преобразований в пространстве. Поскольку у дисплеев высокого разрешения четыре экранных пикселя для каждой точки, точки могут быть выражены как значение с плавающей точкой. Значения, которые являются целыми числами в стандартном разрешении, такие как координаты мыши, являются значениями с плавающей точкой для дисплеев с высоким разрешением, что обеспечивает большую точность для таких вещей, как выравнивание графики.
Разрешение может изменяться динамически
OS X поддерживают динамическую среду, которая может включать в себя более одного дисплея, один из которых или оба могут быть стандартными или высокого разрешения. Из-за этого, пользователи могут:
- Подключать или отключать второй дисплей
- Закрыть крышку ноутбука и использовать его с внешним дисплеем
- Перетаскивать окно приложения с одного экрана на другой
Резервный буфер окна принадлежит дисплею, на котором окно отображено. Если пользователь перетаскивает окно с одного монитора на другой, право собственности на резервный буфер изменяется, как только назначение для отображения имеет более чем 50% от содержимого окна (как показано на Рисунке ниже). При смене владельцев, OS X обрабатывает столько этих динамических изменений, сколько может.
Большую часть времени, OS X автоматизирует динамическое изменение разрешения, плавно переключая контент от стандартного до большого размера. Есть некоторые случаи, в которых вашему приложению будет необходимо принять меры, при изменении разрешения.
OS X предоставляет множество улучшений отрисовки автоматически
Вне зависимости от разрешения основного экрана, технология отрисовки в OS X обеспечивает поддержку для создания наилучшего отображения вашего контента. Например:
- Стандартные видовые представления AppKit (текстовые поля, кнопки, табличные представления и т. д.) автоматически отображаются правильно при любом разрешении.
- Векторный контент ( NSBezierPath , CGPathRef , PDF и т.д.) автоматически использует любые дополнительные пиксели чтобы сделать острее линии для форм.
- Cocoa автоматически отображает текст острее в высоких разрешениях.
- AppKit поддерживает автоматическую загрузку вариантов изображений с высоким разрешением.
Большая часть существующего кода отрисовки будет работать без изменений, потому что окно сервера автоматически учитывает размер резервного буфера для оконного графического контекста. Любой контент, который вы отрисовываете методом drawRect: будет в соответствующем разрешении для базового устройства. Тем не менее, любой код отрисовки который вы создаете, и который использует память, такой как Quartz растровые изображения, потребует от вас управления контекстом.
Для растровых изображений адаптированных к дисплеям с высоким разрешением, вам нужно создать версию ваших ресурсов изображений, которые имеют в два раза выше разрешение, чем раньше. И после того, как вы предоставите эти версии, AppKit будет управлять загрузкой версии, соответствующего разрешения.
Представления изображений идеально подходят для высокого разрешения
Понятие представление изображения имеет важное значение для высоких разрешений. Изображение объекта представления ( NSImageRep ) представляет собой изображение с определенным пользователем размером и плотностью пикселей, с использованием конкретного цветового пространства, и в определенном формате данных. NSImage объекты используют представления изображения для управления данными изображения. Объект NSImage может содержать несколько объектов представления изображения.
Для файловых изображений, NSImage создает объект представления изображения для каждого отдельного изображения, хранящегося в файле. Хотя большинство форматов изображений поддерживают только одно изображение, в форматах, таких как TIFF может храниться несколько изображений. Чтобы поддерживать высокое разрешение, вы можете предоставить пару изображений, одно в стандартном разрешении и другое высоком разрешении в одном и том же файле. Когда приходит время для отображения изображение в вашем приложении, NSImage выбирает наименьшее представление изображения, которое имеет больше пикселей, чем цель.
Насколько хорошо существующее приложение запускается в высоком разрешении зависит от библиотек и графических средств, которые оно использует. Приложение, код которого еще не был оптимизирован для графики с высоким разрешением будет либо работать в framework-scaled mode (масштабный режим) или magnified mode (режим увиличения). Большинство приложений Cocoa будет работать в framework-scaled mode другие приложения будут работать в magnified mode. Разница между этими режимами в размере резервного буфера. В режиме увеличения, резервный буфер имеет одну четвертую количества пикселей на дисплее с высоким разрешением (половина ширины и высоты экрана). Система должна увеличить содержимое резервного буфера для заполнения всего экрана. В режиме масштабирования резервный буфер имеет такое же количество пикселей как и дисплей. Каждый режим объясняется более подробно в следующих разделах.
OS X автоматически увеличивает графику для приложения со стандартным разрешением Framework-Scaled Mode обеспечивает автоматическое масштабированиеБольшинство существующих приложений Cocoa автоматически масштабируются. В framework-scaled mode, framework приложения автоматически регулирует размер отрисовки для обеспечения четкой графики как для дисплея стандартного так и высокого разрешения. Размер резервного буфера регулируется, чтобы приспособиться к количеству пикселей на экране. Применение отрисовывает все стандартные элементы пользовательского интерфейса, такие как кнопки, меню и заголовки окна- в нужном размере разрешения.
Как толлько framework обнаруживает, что элементы управления должны быть отрисованы на дисплее с высоким разрешением, он регулирует резервный буфер для размещения масштабирования в каждом измерении в 2 раза. Будь то стандартное или высокое разрешение, пользователь видит высококачественный рендеринг элементов управления. Элементы управления отображаются для пользователя в том же самом размере, независимо от размера резервного буфера, и на дисплее с высоким разрешением, элементы управления выглядят резче из-за высокой плотности пикселов.
Любая векторная графика выполняемая приложения масштабируется до высокого разрешения и будет выглядеть также остро, как стандартные элементы управления пользовательского интерфейса.
Растровые изображения увеличиваются до высокого разрешения дисплея. Изображения будут иметь правильный размер для пользователя, но будут казаться немного нечеткими из-за увеличения. Приложения должны обеспечить версии изображений для высокого разрешения, чтобы получить лучшие пользовательские оценки.
Приложение запустится в этом режиме, если оно использует Cocoa app в качестве Principal class в установках в Xcode.
Magnified Mode используется для приложений, которые еще не готовы к высоким разрешениямВ режиме увеличения, резервный буфер окна остается в масштабе 1x. Система масштабирует содержимое используя интерполяцию с ближайшим пикселем, чтобы отобразить контент на дисплее с высоким разрешением. Пользовательский интерфейс будет того размера, как вы и ожидаете, без дополнительных деталей, и может несколько быть размыт.
Все приложения, которые не являются Cocoa приложениями работают в режиме magnified. Тем не менее, Cocoa приложение также может работать в режиме magnified, если:
- Пользователь устанавливает возможность открыть приложение в низком разрешении (См. рисунок ниже)
- Приложению известно, что оно будет испытывать определенные проблемы при работе в framework-scaled mode, так что система делает исключение и вместо этого запускает приложение в magnified mode.
Из-за потери детализации, вы должны полагаться на magnified mode только пока вы не внесли необходимые изменения, для поддержки графики высокого разрешения, в ваше приложение.
О поддержке приложением высокого разрешения можно ознакомиться в окне СвойстваПользователи могут выяснить, является ли приложение работающим в низком разрешении, открыв окно Свойства и, посмотрев на "Открыть в низком разрешении" флажок, как показано на рисунке ниже. Приложения, которые не являются Cocoa приложениями имеют эту опцию, выбранную и недоступную (затененную). Большинство приложений Cocoa имеют этот флажок доступеным, но не выбранным. Пользователь может сделать выбор для запуска приложений Cocoa в увеличенном режиме, если приложение имеет юзабилити вопросы, связанные с высоким разрешением.
Если флажок "Открыть в низком разрешении" установлен по умолчанию для вашего приложения -флажок доступен (затенен) или нет - Вы можете изменить значение по умолчанию:
- Исправив все ошибки, связанные с высоким разрешением
- Установив NSHighResolutionCapable атрибут в YES , в Info.plist для приложения, как показано на рисунке ниже:
Когда пользователи обновляют до пересмотренной версии вашего приложения, они будут иметь возможность пользоваться версией с высоким разрешением.