2012-02-21 2 views
7

Итак, некоторые iPad в будущем, вероятно, будут иметь Retina Display. И Apple, скорее всего, собирается stick to the @2x paradigm. Я ожидал этого некоторое время, и поэтому у меня уже есть @ 2x работы для iPad в моих приложениях; некоторые из них уже находятся в магазине приложений.iPad 3 Retina Display, @ 2x изображения и приложения уже находятся в магазине

Мой вопрос заключается в следующем: мне нужно будет перекомпилировать и/или повторно отправить приложения, чтобы использовать указанные работы, когда этот мифический iPad выпущен для того, чтобы использовать эти файлы? Или это что-то запеченное в самой ОС, и оно должно просто автоматически использовать их?

(Так произошло то же самое, прежде чем, что произошло ж/приложений, выпущенных под предварительным iPhone-4 SDKs, что произошло, чтобы иметь право произведения искусства? Разве они просто работают?)

+1

Я не думаю, что у каких-либо приложений для iPhone-4 только что получилось правильное оформление .... – Thilo

+0

Конечно, кто-нибудь знает наверняка, если это правильно? –

ответ

6

Я экспериментировал с сетчатке IPad сегодня, и вот что, кажется, происходит:

  • Если приложение компилируется с достаточно недавним Xcode (вероятно 4.2+), @ используются 2x изображения, так же, как при вышел iPhone 4.
  • Если приложение было скомпилировано с Xcode 3, изображения @ 2x равны , а не, даже если они есть. (например, в гибридном приложении с поддержкой iphone-4.)

(У нас есть несколько проектов на основе XCode-3, многие из которых являются гибридными для iPhone сетчатки. Ни одна из них не использовала графику @ 2x на новый ipad. Когда я скомпилировал тестовый проект как в Xcode 3, так и в Xcode 4, сборка 4 использовала ресурс сетчатки и 3 сборки не делала. Дальнейшие эксперименты показали, что разница скомпилирована в сам исполняемый файл, поэтому это не просто info.plist tweak, как я и надеялся.)

[eta .: моя гипотеза заключается в том, что компиляция с более ранним SDK связывает вас с другой версией UIKit во время выполнения. Странные различия в поведении, поскольку я обновляю наш код, похоже, это подтверждают. Если кто-нибудь знает заклинание, чтобы знать наверняка, прокомментируйте.]

[отредактировано, чтобы добавить еще раз: есть и разница в nib. Старый проект, открытый в xcode 4, не будет использовать графику @ 2x, пока я не сохраню свой файл MainWindow.nib; то это происходило повсюду, без каких-либо других изменений. . Я подозреваю, что скрытое свойство объекта UIWindow]

+0

Не то, чтобы это была хорошая новость, но у меня такой же опыт, по крайней мере, часть о изображениях @ 2x, которые не используются при компиляции с Xcode3. Я еще не пробовал Xcode 4. Спасибо за публикацию, по крайней мере, я знаю, что я не сумасшедший. – hyperspasm

+0

Ничего себе, это подробный ответ. Благодаря! – DOOManiac

1

Я полагаю, это будет просто работать на устройстве. Я понимаю, что [UIImage imageNamed:] ищет @ 2x, если устройство поддерживает его. Поэтому он кажется встроенным в iOS. Это просто догадка.

2

То, что я нашел, когда здание с XCode 4.2 (IOS SDK 5.0), работающие на Snow Leopard является следующие:

Изображения загружаются программно с помощью [UIImage imagedNamed: ] в вашем коде будет правильно загружать изображения сетчатки @ 2x на сетчатке iPad.

Изображения, указанные на кнопках и представлениях в интерфейсных конструкторах Файлы XIB обычно НЕ правильно загружают изображения сетчатки @ 2x.

Обходной путь, который я обнаружил, заключался в том, чтобы заставить UIImage кэшировать каждое изображение, указанное в вашем XIB, с помощью вызовов [UIImage imagedNamed:] в вашем представлении (или соответствующем) initWithNibName контроллера: (NSString *) bundle: (NSBundle *) , Программный метод обеспечивает хорошую нагрузку @ 2x, и система кэширует его, и механизм загрузки XIB заканчивается ссылкой, что дает изображения сетчатки. Например:

// The designated initializer. Override to perform setup that is required before the view is loaded. 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
     // Doing this to precache proper retina versions, because older xcode nibs aren't loading them correctly on retina iPads with XCode 4.2 builds 

     [UIImage imageNamed:@"my_button.png"]; 
     [UIImage imageNamed:@"my_other_button.png"]; 
    } 
    return self; 
} 

Я предполагаю, что здание с XCode 4.3 (SDK 5.1) работает правильно с XIB, но я не был готов к обновлению до Lion, чтобы использовать эту версию XCode.

+0

Спасибо! Я испытал следующее: если вы не укажете имя изображения, подобное этому «[email protected]», и Xcode ищет файл @ 2x, он найдет файл, но он не отобразит его правильно. Он не будет иметь размеры, как ожидалось. Однако, если вы загружаете свое изображение, например, «[email protected]», оно отображается правильно. Я должен подать отчет об ошибке, но в настоящее время я слишком измучен после всех этих экспериментов. – tmighty

Смежные вопросы