Все что нужно сделать разработчикам, это правильно настроить работу с режимом HiDPI.
Про класс NSImage.
Ресурсы и бонусы.
Разумеется не надо забывать про иконку, это полностью работа дизайнера отрисовка иконки в размере 1024x1024px.
Если приложение активно использует OpenGL.
При инициализации вью к которому привязан 3D-context, делаем проверку ретины.
- #if (defined(MAC_OS_X_VERSION_10_7)) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
- if ( [ NSApplication usingLionOSX ] )
- {
- NSRect baseBounds = [ self bounds ];
- NSRect hdpiBounds = [ self convertRectToBacking : baseBounds ];
- if (NO == NSEqualSizes(baseBounds.size, hdpiBounds.size))
- {
- [ self setWantsBestResolutionOpenGLSurface : YES ];
- }
- }
- #endif
При изменении размеров приложения пересчитываем размеры.
- - (void) updateBounds
- {
- NSRect baseBounds = [ self bounds ];
- #if (defined(MAC_OS_X_VERSION_10_7)) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
- if ( [ NSApplication usingLionOSX ] )
- {
- baseBounds = [ self convertRectToBacking : baseBounds ];
- }
- #endif
- ....
- glClearColor ( 0.0f, 0.0f, 0.0f, 1.0f );
- glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
- glViewport (0.0f, 0.0f, baseBounds.size.width, baseBounds.size.height );
- ....
- }
Про класс NSImage.
Вся работа идет не в пикселях, а в точках. Выхода два использовать QuartzCore для работы со всеми изоюбражениями или сделать небольшой фикс-ресайз результирующего изображения.
- NSImageRep* rep = [[img representations] objectAtIndex:0]; // fix HDPI
- if (rep)
- {
- NSSize size = NSMakeSize ([rep pixelsWide], [rep pixelsHigh]);
- [img setSize : size];
- }
Ресурсы и бонусы.
Все UI элементы представленные в виде растровых изображений, должны быть корректно увеличины в два раза. XCode автоматически их подхватит, достаточно добавить *texture.name*@2x.tiff экземпляр вашей текстуры в проект. Если нужно вручную создавать растры из ресурсов то есть метод [NSimage imageNamed : @"*texture.name*"] корректно загрузит нужную картинку.
Разумеется не надо забывать про иконку, это полностью работа дизайнера отрисовка иконки в размере 1024x1024px.
Update 08.11.2012
В XCode 4.x появилась интересная фича по объединению изображений в разных разрешениях в один файл. Настройка называется Combine High Resolution Artwork. Ресурсы в (*.app) будут соединены в один файл (texture.png и texture@2x.png - будут соединены в файл texture.tiff). Это все работает начиная с 10.7.+. Если вам требуется что бы программа работала и на 10.6, то следует отключить эту настройку.
Важное замечание по поводу ретины и поддержки под старые ОС. В XCode 4.4+ был выкинут за ненадобностью SDK под 10.6 osx. Сборка проекта с привлечением этого SDK (можно выпилить из более старых версий XCode), под 10.7.+ и 10.8.+ не даст проявится всем глюкам. Поэтому для проверки работоспособности стоит собирать проект именно в 10.6. и там же его тестить.
Комментариев нет:
Отправить комментарий