2010-07-07 16 views
12

Jestem w trakcie aktualizacji mojej aplikacji na iPhone do grafiki o wysokiej rozdzielczości i mam problemy z starszymi urządzeniami. Sytuacja dotyczy moich ikon UITabBar. Rzucić okiem:Wysokiej rozdzielczości ikony UITabBar są wyświetlane w pełnym rozmiarze na ekranie o niskiej rozdzielczości

alt text

Górny ekranu wygląda poprawnie. Został przechwycony na telefonie iPhone najnowszej generacji (nowy ekran) z systemem OS4. Jednak drugi zrzut ekranu jest całkowicie błędny. Ikony o wysokiej rozdzielczości wyświetlają się w rozmiarze 100% i są przycinane. Ten drugi zrzut ekranu pochodzi z mojego iPoda touch drugiej generacji (stary ekran) z systemem OS4.

Jestem bardzo zdezorientowany. Przeczytałem dokumentację Apple i, o ile wiem, robię wszystko, czego potrzebują. W moim app wiązkę mam obrazy nazwane jako:

obrębie interfejsu konstruktora, mam określony niskiej rozdzielczości wersję każdego obrazu (nazwa pliku bez „@ 2x”) do wykorzystania w pasku kart. Jeśli poprawnie zrozumiem dokumentację iPhone'a, urządzenie powinno automatycznie wykryć rozdzielczość ekranu i wyświetlić wersję wysokiej rozdzielczości, jeśli jest dostępna. Jeśli więc cokolwiek, wygląda na to, że mój iPod touch nieprawidłowo wykrywa rozdzielczość wyświetlania. Czy może czegoś tu brakuje?

Każda pomoc lub wgląd, który można zaoferować, byłby mile widziany! Dzięki.

Aktualizacja 1:

No szczęście do tej pory. Wziąłem z metody ręcznej i dodaje się następujące polecenia viewDidLoad mojego 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]; 
} 

To wciąż daje ten sam wynik jak powyżej (odcięcia dużych ikon w obrębie paska kart). Czy ktoś słyszał o problemach z parami ikon o wysokiej rozdzielczości opartymi na UITabBar?

Aktualizacja 2:

Odnośnie komentarza Jamesa:

Tak, udało mi się rozwiązać ten problem. Wydawało się, że jest to błąd związany z odwołaniami do plików w XCode. Brakowało mi pomysłów, więc wycofałem się i zacząłem usuwać wszystkie @ 2x obrazy z mojej aplikacji, aby wszystko poprawnie wyświetlało się z grafiką o niskiej rozdzielczości. Po ponownym wyświetleniu obrazów o odpowiedniej wielkości (choć w niskiej rozdzielczości), jeden po drugim zaczęłam dodawać obrazy @ 2x, czekając, aż coś się zepsuje. Po raz drugi wszystko działało dobrze. Nie wiem, dlaczego tak się stało. Wydawało się, że SDK ma kilka przewodów, co do tego, co się stało.

+0

Czy udało Ci się rozwiązać ten problem? Mam dokładnie ten sam problem, w którym z jakiegoś powodu podczas wdrażania mojej aplikacji na urządzeniu z systemem iOS 3.1.3 przy użyciu obrazów wysokiej rozdzielczości, w dokładnie taki sam sposób, jak w urządzeniu 3.1.3, wyświetla się wersja wysokiej rozdzielczości plik png i kadrowanie go. – James

+0

człowiek, ten błąd jest denerwujący jak bzdura. uzyskiwanie takich samych wyników w konstruktorze interfejsów XCode i brak szczęścia w rozwiązywaniu go poprzez usuwanie/odczytywanie zasobów itp. Bardzo frustrujące. [1 minuta później] - a teraz działa dobrze. – SmartyP

Odpowiedz

4

Jak rozumiem, magia jest w metodach UIImage: imageNamed:, imageWithContentsOfFile: i initWithContentsOfFile:. Podaj jeden z tych liter NSString bez "@ 2x" lub rozszerzenie pliku, a magicznie znajdzie odpowiednią wersję pliku dla twojego urządzenia.

Jednym z nich jest to, że obrazy dla elementów paska kart muszą być ustawione programowo. Możliwe, że IB nie jest jeszcze wystarczająco inteligentny, by napisać stalówkę, która dynamicznie wybiera obraz w oparciu o rozdzielczość urządzenia. Spróbuj więc ustawić te obrazy ręcznie w metodzie -viewDidLoad.

+0

Dzięki za odpowiedź, niestety to wciąż nie wystarczy. Będę zamieszczał moje dalsze wysiłki w tym wątku. – bigmac

+0

Widzę kod, który wysłałeś. Spróbuj zostawić ".png" ze swoich nazw plików. Jak rozumiem, metody te będą wymagać nazwy bazowej jako argumentu NSString i wyszukiwania pasujących plików z opcjonalnym "@ 2x" i rozszerzeniem pliku. –

0

Spróbuj pominąć rozszerzenie pliku .png. Spowoduje to, że system operacyjny będzie szukał odpowiednio plików o niskiej rozdzielczości i wersji @ 2x. Zostało to udokumentowane w przeglądzie "Wspieranie ekranów o wysokiej rozdzielczości" firmy Apple.

+0

Próbowałem wcześniej usunąć rozszerzenie bez powodzenia. Dopiero gdy całkowicie usunąłem i zrewolucjonizowałem wszystkie obrazy, które dostałem ten problem wyprostowałem. – bigmac

Powiązane problemy