Подтвердить что ты не робот

Значки с высоким разрешением UITabBar отображаются в полном размере на экране с низким разрешением

Я занимаюсь обновлением своего iPhone-приложения до графики с высоким разрешением, и у меня возникли проблемы со старыми устройствами. Ситуация связана с моими значками UITabBar. Посмотрите:

alt text

Верхний скриншот выглядит корректно. Он был записан на iPhone последнего поколения (новый экран) под управлением OS4. Однако второй скриншот совершенно неправильный. Значки с высоким разрешением отображаются со 100% размером и обрезаются. Этот второй снимок был снят с моего iPod touch второго поколения (старый экран) с OS4.

Итак, я действительно смущен. Я прочитал документацию Apple, и насколько я знаю, я делаю все, что им нужно. В моем комплекте приложений у меня есть изображения, названные так:

Внутри построителя интерфейсов я указал версию с низким разрешением каждого изображения (имя файла WITHOUT "@2x" ), которое будет использоваться на панели вкладок. Если я правильно понимаю документацию на iPhone, устройство должно автоматически определять разрешение экрана и отображать версию с высоким разрешением, если она доступна. Поэтому, если что-нибудь, похоже, что мой iPod touch неправильно обнаруживает его разрешение дисплея. Возможно, я что-то пропустил?

Любая помощь или понимание, которые могут быть предложены, будут оценены! Спасибо.

Обновление 1:

Пока не повезло. Я взял ручной подход и добавил следующее в команду viewDidLoad моего UITabBarController:

- (void)viewDidLoad {
    [super viewDidLoad];

    UITabBarItem *tab;
    UIViewController *item;

    tab = [[UITabBarItem alloc] initWithTitle:@"Featured" image:[UIImage imageNamed:@"tab-featured.png"] tag:0];
    item = [self.viewControllers objectAtIndex:0];
    item.tabBarItem = tab;
    [tab release];

    tab = [[UITabBarItem alloc] initWithTitle:@"Topics" image:[UIImage imageNamed:@"tab-topics.png"] tag:1];
    item = [self.viewControllers objectAtIndex:1];
    item.tabBarItem = tab;
    [tab release];

    tab = [[UITabBarItem alloc] initWithTitle:@"Video" image:[UIImage imageNamed:@"tab-video.png"] tag:2];
    item = [self.viewControllers objectAtIndex:2];
    item.tabBarItem = tab;
    [tab release];

    tab = [[UITabBarItem alloc] initWithTitle:@"Experts" image:[UIImage imageNamed:@"tab-experts.png"] tag:3];
    item = [self.viewControllers objectAtIndex:3];
    item.tabBarItem = tab;
    [tab release];

    tab = [[UITabBarItem alloc] initWithTitle:@"Events" image:[UIImage imageNamed:@"tab-events.png"] tag:4];
    item = [self.viewControllers objectAtIndex:4];
    item.tabBarItem = tab;
    [tab release];
}

Это все равно дает тот же результат, что и выше (большие значки отсечки в панели вкладок). Кто-нибудь слышал о проблемах с заполнением пиктограмм значков высокого разрешения UITabBar?

Обновление 2:

Относительно комментария Джеймса:

Да, я смог это разрешить. Это была ошибка с ссылками на файлы в XCode. У меня не было идей, поэтому я откинулся назад и начал вырезать все @2x изображения из моего приложения, чтобы снова отобразить все снова с помощью изображений с низким разрешением. После того, как приложение снова отображает изображения правильного размера (хотя и с низким разрешением), затем один за другим я начал добавлять образы @2x обратно, ожидая чего-то сломать. Казалось, он отлично работает во второй раз. Не знаю, почему и что произошло. SDK просто показалось, что некоторые провода пересекаются относительно того, что произошло.

4b9b3361

Ответ 1

Как я понимаю, магия в методах UIImage imageNamed:, imageWithContentsOfFile: и initWithContentsOfFile:. Передайте один из них литерал NSString без "@2x" или расширения файла, и он волшебным образом найдет нужную версию файла для вашего устройства.

Одним из следствий этого является то, что изображения для элементов панели табуляции должны быть установлены программно. Возможно, что IB еще недостаточно умен, чтобы написать наконечник, который динамически выбирает изображение на основе разрешения устройства. Поэтому попробуйте настроить эти изображения вручную в методе -viewDidLoad.

Ответ 2

Попробуйте отказаться от расширения .png. Это приводит к тому, что ОС автоматически ищет файлы с низким разрешением и @2x. Это описано в обзоре Apple "Поддержка экранов с высоким разрешением".