2012-05-28 9 views
5

Mam problem, którego po prostu nie mogłem wymyślić. Mam zrobioną aplikację, która zrobi zdjęcie z przodu i jedną z tylnej kamery, a następnie scalę je ze sobą.Załaduj obrazy siatkówki (wysokiej jakości) programowo (na przyciskach)

Nazwa aplikacji jest GroupCam

Jednak mam problem, w którym moi UIButtons nie zostanie załadowany jako siatkówki obrazów od początku. Jeśli ustawię je jako @ 2x w konstruktorze interfejsów, będą one wyświetlane w wysokiej jakości, ale gdy je ponownie załaduję programowo, zamiast tego pojawią się niskie wersje.

Wynika to z faktu, że po zrobieniu zdjęcia i zmianie jego wyglądu obrazy przycisków zmieniają się, ale gdy użytkownik naciśnie przycisk Wstecz, ikony aparatu będą wyglądać okropnie (ponieważ są ładowane wersje niskiej jakości) .

Proszę sprawdzić poniższe zdjęcia:

Pierwszy ekran: Tylko prawy górny przycisk jest zniekształcony, bo jestem sprawdzanie wartości lampy błyskowej i „załadunek” odpowiedni obraz programowo.

First Screen

Drugi ekran: Użytkownik został przeniesiony do innego ekranu i wrócił do pierwszego, wszystkie przyciski zostały przeładowane i teraz wszyscy są zniekształcone.

Second Screen

Jeśli ktoś ma jakiś pomysł, dlaczego tak się dzieje, że naprawdę to doceniam!

Dzięki.

Edytuj:

Tak ładuję obrazy.

[self.flashButton setImage:[UIImage imageNamed:@"flashOff"] 
          forState:UIControlStateNormal]; 

Czytałem gdzieś w internecie, że robi to automatycznie załaduje najbardziej odpowiednią wersję obrazu.

Próbowałem to również, ale wynik jest taki sam:

[self.takeButton setImage:[UIImage imageNamed:@"takePhoto.png"] forState:UIControlStateNormal]; 
+1

Mam świetne wyniki, używając obrazów normalnych i siatkówkowych w aplikacji. Więc sugeruję, abyś wybrał normalną rozdzielczość tych obrazów i nie włączaj ich do swojego projektu (przez trzecie okienko po prawej stronie - po prostu odznacz pole wyboru). Teraz twoja aplikacja ma TYLKO obrazki siatkówki. Cóż, jeśli coś pójdzie nie tak, to coś w twojej aplikacji się zepsuło. Występuje pewien problem z [UIImage imageNamed: foo.png]. Jeśli zmienisz ten obraz, wszyscy kolejni użytkownicy tego obrazu otrzymają zmodyfikowany obraz. Ponownie odczytaj UIImage imageNamed: –

+2

Po prostu ponownie przeczytałem ci pytanie, a zobaczyłem właśnie to stwierdzenie: "Jeśli ustawię je jako" @ 2x "na konstruktorze interfejsów". Tak więc, w IB, wpisałeś ich nazwy jako "[email protected]", i to działa. Więc jedyną rzeczą, o której mogę myśleć, że twój problem może być, jest format "@ 2x". Czy jesteś pewien, że poprawnie nazwałeś te obrazy - "[email protected]", NOT & 2x.png itd. Wygląda na to, że iOS nie widzi plików hi rez i to jest TYLKO powód, dla którego mogę myśleć, że to wytłumaczyłoby to . Więc spróbuj usunąć "@ 2x" w IB i zobacz, co się stanie. Założę się, że przez cały czas masz cały niski rez. –

+0

tak są sformatowane i poprawnie nazwane. Obrazy będą ładowane w jakości HD zupełnie bez zarzutu, jedynym problemem jest to, kiedy ładuję je programowo. iOS decyduje się załadować plik o niskiej rozdzielczości. – Pochi

Odpowiedz

3

Jeśli Twoja aplikacja jest podejmowanie obraz z przedniej kamery oraz jedną z tyłu kamery i łączenia ich ze sobą, a następnie urządzenie wymaga przód stoi kamera. Wszystkie urządzenia z systemem iOS, które mają przednie kamery, również mają wyświetlacz Retina (o ile nie tworzymy dla iPada 2, ale to inna historia), więc nie powinieneś naprawdę mieć normalnych obrazów, więc wszystkie twoje zdjęcia powinny być obrazy siatkówki. Jeśli nie ma normalnych obrazów, problem nie powinien wystąpić. Wykonaj kopię zapasową i spróbuj usunąć wszystkie normalne obrazy, a następnie spróbuj. Ponieważ twoje użycie obrazu UIImageName: @ "ImageName", tak jak powiedziałeś, powinno automatycznie wybrać obraz! Powodzenia!

+0

Miałem nadzieję znaleźć przyczynę, dla której tak się dzieje, ale wydaje się, że jest to rozwiązanie. – Pochi

+0

@LuisOscar Przepraszamy, to było moje najlepsze przypuszczenie :(Spróbuj zgłosić błąd na stronie bugreport.apple.com. – sridvijay

4

Po pierwsze, prawdopodobnie warto sprawdzić, czy faktycznie są wyświetlane wersje o niskiej rozdzielczości. Podskoczyłem ostatnio do podobnego założenia, zamieniono wersję obrazu o niskiej rozdzielczości na coś innego i potwierdziłem, że wersja hi-res wciąż jest wyświetlana, ale została zniekształcona.

Mój rzeczywisty problem, miałem ustawione

<uibutton_superview>.layer.shouldRasterize = YES;

Jeżeli którykolwiek z przycisków przodkowie tego zestawu, może to prawdopodobnie problem.

3

Obudowa nazw plików obrazów nie ma znaczenia na symulatorze, ale działa na urządzeniu.

Skorzystaj ze wszystkich spójnych przypadków. Image.png i [email protected] są rozpoznawane i będą działać razem w symulatorze, ale nie na urządzeniu. użyj image.png i [email protected] Lub możesz również użyć .jpg tak długo, jak długo dopasowuje się przypadek.

Powiązane problemy